if SERVER then
    util.AddNetworkString("igs_session_start")
    util.AddNetworkString("igs_session_reward_given")

    local HOUR = 60 * 60
    local REWARD_AFTER = HOUR * 2  -- 2 часа
    local REWARD_SIZE = 150         -- 150 рублей (изменено по просьбе пользователя)

    -- Таблица для отслеживания времени начала сессии игроков
    local playerSessionStart = {}
    local playerRewardGiven = {}

    -- Отправка времени начала сессии при спавне
    hook.Add("PlayerInitialSpawn", "igs.session_reward_ui", function(pl)
        playerSessionStart[pl:SteamID()] = os.time()
        
        local lastRewardDate = pl:GetPData("igs_playtime_bonus_date", "")
        local currentDate = os.date("%d-%m-%Y")
        
        playerRewardGiven[pl:SteamID()] = (lastRewardDate == currentDate)
        
        net.Start("igs_session_start")
        net.WriteInt(os.time(), 32)
        net.Send(pl)
    end)

    -- Очистка данных при отключении игрока
    hook.Add("PlayerDisconnected", "igs.session_cleanup", function(pl)
        playerSessionStart[pl:SteamID()] = nil
        playerRewardGiven[pl:SteamID()] = nil
    end)

    -- Проверка и выдача награды каждые 60 секунд
    timer.Create("igs.check_session_rewards", 60, 0, function()
        for _, pl in pairs(player.GetAll()) do
            local steamID = pl:SteamID()
            local startTime = playerSessionStart[steamID]
            local rewardGiven = playerRewardGiven[steamID]
            
            if startTime and not rewardGiven then
                local elapsed = os.time() - startTime
                
                -- Если прошло 2 часа - выдаем награду
                if elapsed >= REWARD_AFTER then
                    -- Проверяем, что игрок не AFK (опционально)
                    if IsValid(pl) and pl:Alive() then
                        -- Выдаем рубли на баланс IGS
                        pl:AddIGSFunds(REWARD_SIZE, "Бонус за 2 часа игры")
                        
                        -- Уведомление игроку
                        IGS.Notify(pl, "Вы получили " .. REWARD_SIZE .. " руб за 2 часа игры!")
                        
                        -- Помечаем, что награда выдана
                        playerRewardGiven[steamID] = true
                        pl:SetPData("igs_playtime_bonus_date", os.date("%d-%m-%Y"))
                        
                        -- Логирование
                        print("[IGS Session Reward] " .. pl:Nick() .. " (" .. steamID .. ") получил " .. REWARD_SIZE .. " руб за 2 часа игры")
                        
                        -- Отправляем клиенту сигнал об успешной выдаче
                        net.Start("igs_session_reward_given")
                        net.Send(pl)
                    end
                end
            end
        end
    end)
end
