local PLUGIN = PLUGIN

PLUGIN.name = "Murder Drones Death Screen"
PLUGIN.description = "Добавляет кинематографичный экран смерти в стиле Murder Drones"
PLUGIN.author = "Scripty & Ported to Helix"

-- Конфигурация
ix.config.Add("deathScreenEnabled", true, "Включить экран смерти Murder Drones", nil, {
	category = "Death Screen"
})

ix.config.Add("deathScreenDuration", 300, "Длительность показа экрана смерти (секунды)", nil, {
	data = {min = 1, max = 600, decimals = 1},
	category = "Death Screen"
})

ix.config.Add("deathScreenMinDuration", 20, "Минимальное время до возможности возродиться (секунды)", nil, {
	data = {min = 0, max = 60, decimals = 1},
	category = "Death Screen"
})

ix.config.Add("deathScreenFadeInSpeed", 5, "Скорость появления экрана", nil, {
	data = {min = 1, max = 20, decimals = 1},
	category = "Death Screen"
})

ix.config.Add("deathScreenTextFadeSpeed", 0.5, "Скорость появления текста", nil, {
	data = {min = 0.1, max = 5, decimals = 1},
	category = "Death Screen"
})

ix.config.Add("deathScreenTextColor", Color(132, 43, 60), "Цвет текста экрана смерти", nil, {
	category = "Death Screen"
})

ix.config.Add("deathScreenMainText", "YOU'RE DEAD", "Основной текст экрана смерти", nil, {
	category = "Death Screen"
})

ix.config.Add("deathScreenSubText", "[IDIOT]", "Подзаголовок экрана смерти", nil, {
	category = "Death Screen"
})

ix.config.Add("deathScreenRespawnText", "НАЖМИТЕ [ПРОБЕЛ] ЧТОБЫ ВОЗРОДИТЬСЯ", "Текст подсказки для возрождения", nil, {
    category = "Death Screen"
})

ix.config.Add("deathScreenDisableSound", true, "Отключить стандартный звук смерти", nil, {
	category = "Death Screen"
})

ix.config.Add("deathPenaltyAmount", 3000, "Сумма штрафа за возрождение", nil, {
    data = {min = 0, max = 100000},
    category = "Death Screen"
})

ix.config.Add("deathPenaltyWarningText", "При сдаче с вас спишут штраф: %s", "Текст предупреждения о штрафе", nil, {
    category = "Death Screen"
})

ix.config.Add("deathRespawnMinBalance", 5000, "Минимальный баланс для возможности сдаться", nil, {
    data = {min = 0, max = 100000},
    category = "Death Screen"
})

if SERVER then
    util.AddNetworkString("ixDeathScreen")
    util.AddNetworkString("ixPlayerRespawn")

    function PLUGIN:PlayerDeath(ply, inflictor, attacker)
        if not ix.config.Get("deathScreenEnabled") then
            return
        end

        local maxDuration = ix.config.Get("deathScreenDuration", 300)
        local minDuration = ix.config.Get("deathScreenMinDuration", 20)
        local killerName = "Неизвестно"

        if (IsValid(attacker)) then
            if (attacker:IsPlayer()) then
                killerName = attacker:Name()
            elseif (attacker:IsNPC()) then
                killerName = attacker:GetClass()
            elseif (IsValid(attacker:GetOwner()) and attacker:GetOwner():IsPlayer()) then
                killerName = attacker:GetOwner():Name()
            elseif (attacker.GetCreator and IsValid(attacker:GetCreator()) and attacker:GetCreator():IsPlayer()) then
                killerName = attacker:GetCreator():Name()
            else
                killerName = (attacker:GetClass() != "worldspawn") and attacker:GetClass() or "Окружение"
            end
        end

        net.Start("ixDeathScreen")
            net.WriteFloat(maxDuration)
            net.WriteFloat(minDuration)
            net.WriteString(killerName)
        net.Send(ply)

        -- Блокируем стандартный спавн Helix
        local duration = RespawnTime[ply:GetUserGroup()] or 60
        ply.ixDeathTime = RealTime()
        ply.ixNextSpawn = RealTime() + duration
        ply:SetNetVar("deathTime", CurTime() + maxDuration)
        
        -- Сохраняем реальное минимальное время для проверки
        ply.ixDeathScreenRespawnTime = CurTime() + minDuration
    end

    -- Разрешаем создание стандартного регдолла Helix
    function PLUGIN:ShouldSpawnClientRagdoll(ply)
        return true
    end

    net.Receive("ixPlayerRespawn", function(len, ply)
        if (IsValid(ply) and !ply:Alive() and ply:GetCharacter()) then
            if ((ply.ixDeathScreenRespawnTime or 0) <= CurTime()) then
                local character = ply:GetCharacter()
                local minBalance = ix.config.Get("deathRespawnMinBalance", 5000)
                
                -- Проверка баланса перед спавном
                if (character:GetMoney() < minBalance) then
                    ply:Notify("У вас недостаточно средств, чтобы сдаться. Нужно минимум " .. ix.currency.Get(minBalance))
                    return
                end

                local penalty = ix.config.Get("deathPenaltyAmount", 3000)
                if (penalty > 0) then
                    character:TakeMoney(penalty)
                    ply:Notify("Вы сдались. С вашего счета списано " .. ix.currency.Get(penalty) .. " штрафа.")
                end
                
                ply:Spawn()
            end
        end
    end)
end

ix.util.Include("cl_deathscreen.lua")
