-- Переопределение стилей чатбокса под общий дизайн Military RP

local PLUGIN = PLUGIN
local gradient = surface.GetTextureID("vgui/gradient-u")
local gradientUp = surface.GetTextureID("vgui/gradient-d")

-- Цвета в стиле HUD
local Colors = {
    green = Color(84, 147, 90),
    dark_green = Color(52, 91, 60),
    darker_green = Color(35, 53, 29),
    gray = Color(193, 193, 193),
    gray_dark = Color(94, 94, 94),
    black = Color(0, 0, 0, 220),
    black_light = Color(0, 0, 0, 150),
    white = Color(255, 255, 255)
}

-- Переопределяем стандартные функции рисования чатбокса
local SKIN = derma.GetDefaultSkin()

-- Фон чатбокса
function SKIN:PaintChatboxBackground(panel, width, height)
    -- Blur эффект
    ix.util.DrawBlur(panel, 8)
    
    -- Основной фон с градиентом
    surface.SetDrawColor(Colors.black)
    surface.DrawRect(0, 0, width, height)
    
    if (panel:GetActive()) then
        -- Зелёный градиент сверху когда чат активен
        surface.SetDrawColor(Colors.dark_green.r, Colors.dark_green.g, Colors.dark_green.b, 120)
        surface.SetTexture(gradientUp)
        surface.DrawTexturedRect(0, panel.tabs.buttons:GetTall(), width, height * 0.25)
    end
    
    -- Обводка в стиле HUD
    surface.SetDrawColor(Colors.darker_green)
    surface.DrawOutlinedRect(0, 0, width, height)
    
    -- Тонкая внутренняя обводка
    surface.SetDrawColor(Colors.green.r, Colors.green.g, Colors.green.b, 60)
    surface.DrawOutlinedRect(1, 1, width - 2, height - 2)
end

-- Кнопки табов
function SKIN:PaintChatboxTabButton(panel, width, height)
    if (panel:GetActive()) then
        -- Активная вкладка - зелёный градиент
        surface.SetDrawColor(Colors.dark_green)
        surface.DrawRect(0, 0, width, height)
        
        surface.SetDrawColor(Colors.green.r, Colors.green.g, Colors.green.b, 100)
        surface.SetTexture(gradient)
        surface.DrawTexturedRect(0, 0, width, height)
    else
        -- Неактивная вкладка
        surface.SetDrawColor(Colors.black_light)
        surface.DrawRect(0, 0, width, height)
        
        -- Индикатор непрочитанных сообщений
        if (panel:GetUnread()) then
            surface.SetDrawColor(ColorAlpha(Color(200, 200, 50), Lerp(panel.unreadAlpha, 0, 120)))
            surface.SetTexture(gradient)
            surface.DrawTexturedRect(0, 0, width, height - 1)
        end
    end
    
    -- Разделитель вкладок
    surface.SetDrawColor(Colors.darker_green)
    surface.DrawRect(width - 1, 0, 1, height)
end

-- Панель табов
function SKIN:PaintChatboxTabs(panel, width, height, alpha)
    -- Фон панели табов
    surface.SetDrawColor(Colors.black_light)
    surface.DrawRect(0, 0, width, height)
    
    -- Градиент вниз
    surface.SetDrawColor(Colors.darker_green.r, Colors.darker_green.g, Colors.darker_green.b, 150)
    surface.SetTexture(gradient)
    surface.DrawTexturedRect(0, height * 0.5, width, height * 0.5)
    
    local tab = panel:GetActiveTab()
    
    if (tab) then
        local button = tab:GetButton()
        local x, _ = button:GetPos()
        
        -- Линия под активной вкладкой (зелёная)
        surface.SetDrawColor(Colors.green)
        surface.DrawRect(x, height - 2, button:GetWide(), 2)
        
        -- Обводка панели табов
        surface.SetDrawColor(Colors.darker_green)
        surface.DrawRect(0, height - 1, x, 1) -- слева
        surface.DrawRect(x + button:GetWide(), height - 1, width - x - button:GetWide(), 1) -- справа
    end
end

-- Поле ввода текста
function SKIN:PaintChatboxEntry(panel, width, height)
    -- Фон поля ввода
    surface.SetDrawColor(Colors.darker_green.r, Colors.darker_green.g, Colors.darker_green.b, 100)
    surface.DrawRect(0, 0, width, height)
    
    -- Текст
    panel:DrawTextEntryText(Colors.white, Colors.green, Colors.white)
    
    -- Обводка
    surface.SetDrawColor(Colors.dark_green)
    surface.DrawOutlinedRect(0, 0, width, height)
    
    -- Внутренний highlight когда активно
    if panel:HasFocus() then
        surface.SetDrawColor(Colors.green.r, Colors.green.g, Colors.green.b, 80)
        surface.DrawOutlinedRect(1, 1, width - 2, height - 2)
    end
end

-- Превью команды
function SKIN:DrawChatboxPreviewBox(x, y, text, color)
    color = color or Colors.green
    
    local textWidth, textHeight = surface.GetTextSize(text)
    local width, height = textWidth + 8, textHeight + 8
    
    -- Фон
    surface.SetDrawColor(Colors.dark_green)
    surface.DrawRect(x, y, width, height)
    
    -- Градиент
    surface.SetDrawColor(color.r, color.g, color.b, 60)
    surface.SetTexture(gradient)
    surface.DrawTexturedRect(x, y, width, height)
    
    -- Текст
    surface.SetTextColor(Colors.white)
    surface.SetTextPos(x + width * 0.5 - textWidth * 0.5, y + height * 0.5 - textHeight * 0.5)
    surface.DrawText(text)
    
    -- Обводка
    surface.SetDrawColor(Colors.darker_green)
    surface.DrawOutlinedRect(x, y, width, height)
    
    return width
end

-- Префикс команды
function SKIN:DrawChatboxPrefixBox(panel, width, height)
    local color = panel:GetBackgroundColor() or Colors.green
    
    -- Фон
    surface.SetDrawColor(Colors.dark_green)
    surface.DrawRect(0, 0, width, height)
    
    -- Градиент
    surface.SetDrawColor(color.r, color.g, color.b, 80)
    surface.SetTexture(gradient)
    surface.DrawTexturedRect(0, 0, width, height)
    
    -- Обводка
    surface.SetDrawColor(Colors.darker_green)
    surface.DrawOutlinedRect(0, 0, width, height)
end

-- Автодополнение команд
function SKIN:PaintChatboxAutocompleteEntry(panel, width, height)
    -- Выделенный фон
    if (panel.highlightAlpha > 0) then
        surface.SetDrawColor(Colors.dark_green.r, Colors.dark_green.g, Colors.dark_green.b, panel.highlightAlpha * 150)
        surface.DrawRect(0, 0, width, height)
        
        -- Градиент выделения
        surface.SetDrawColor(Colors.green.r, Colors.green.g, Colors.green.b, panel.highlightAlpha * 60)
        surface.SetTexture(gradient)
        surface.DrawTexturedRect(0, 0, width, height)
    end
    
    -- Разделитель между командами
    surface.SetDrawColor(Colors.darker_green.r, Colors.darker_green.g, Colors.darker_green.b, 100)
    surface.DrawRect(0, height - 1, width, 1)
end

hook.Add("LoadFonts", "MilitaryRPChatFonts", function()
    -- Переопределяем шрифты чата на Montserrat
    local scale = ix.option.Get("chatFontScale", 1)
    
    surface.CreateFont("ixChatFont", {
        font = "Montserrat",
        size = 17 * scale,
        weight = 400,
        extended = true
    })
    
    surface.CreateFont("ixChatFontItalics", {
        font = "Montserrat",
        size = 17 * scale,
        weight = 400,
        italic = true,
        extended = true
    })
end)
