-- ==============================================================
-- MODUL: TestMode - Entwickler-Testhelfer
-- NUR FÜR ENTWICKLUNG - vor Release entfernen oder deaktiviert lassen
--
-- Slash-Commands:
--   /gdltest help            -- diese Liste
--   /gdltest sup             -- Supporter für 1h aktivieren
--   /gdltest supoff          -- Supporter deaktivieren
--   /gdltest supstatus       -- Supporter-Status prüfen
--   /gdltest mile <id>       -- einzelnen Meilenstein freischalten
--   /gdltest mileset <n>     -- erste N Meilensteine freischalten
--   /gdltest mileall         -- ALLE Meilensteine freischalten
--   /gdltest mileclear       -- ALLE Meilensteine löschen
--   /gdltest milecheck       -- zeige aktuellen Fortschritt
--   /gdltest title           -- zeige aktiven Titel + Statistik
--   /gdltest titleset <id>   -- Titel direkt setzen (z.B. "immortal")
--   /gdltest nphook          -- Nameplate-Hook Status prüfen
--   /gdltest nprefresh       -- Nameplates sofort neu rendern
--   /gdltest db              -- GuildDeathLogDB Kurzübersicht
--   /gdltest reset           -- Titles + Milestones dieser Session resetten (kein Reload nötig)
-- ==============================================================

local addonName, addon = ...
local GDL = _G["GuildDeathLog"]

-- ==============================================================
-- GUARD: Nur laden wenn GDL existiert
-- ==============================================================
if not GDL then
    print("|cffFF4444[GDL-Test]|r GuildDeathLog nicht gefunden - TestMode übersprungen.")
    return
end

local TestMode = {}

-- ==============================================================
-- HILFSFUNKTIONEN
-- ==============================================================

local function p(msg)
    print("|cffFF8C00[GDL-Test]|r " .. (msg or ""))
end

local function ok(msg) p("|cff44FF44[OK]|r " .. msg) end
local function err(msg) p("|cffFF4444[X]|r " .. msg) end
local function info(msg) p("|cffAAAAFF>>|r " .. msg) end
local function sep() p("|cff555555" .. string.rep("─", 45) .. "|r") end

-- ==============================================================
-- SUB-COMMANDS
-- ==============================================================

-- /gdltest sup  >> Supporter für 1 Stunde aktivieren
local function cmdSup()
    GuildDeathLogDB = GuildDeathLogDB or {}
    GuildDeathLogDB.supporter_until = time() + 3600  -- 1h
    ok("Supporter aktiv (1h, kein Broadcast)")
    info("Supporter-Status: " .. (GDL:IsSupporterActive() and "|cff44FF44AKTIV|r" or "|cffFF4444INAKTIV|r"))

    -- Titles-Modul nachladen wenn nötig
    local Titles = GDL:GetModule("Titles")
    if Titles and Titles.initialized then
        -- Bereits init aber ohne Supporter >> neu initialisieren
        Titles.initialized = false
        C_Timer.After(0.3, function()
            Titles:Initialize()
            ok("Titles-Modul neu initialisiert (Hooks aktiv)")
            if Titles.RefreshAllNameplateTitles then
                C_Timer.After(0.5, function() Titles:RefreshAllNameplateTitles() end)
            end
        end)
    elseif Titles and not Titles.initialized then
        C_Timer.After(0.3, function()
            Titles:Initialize()
            ok("Titles-Modul initialisiert")
        end)
    else
        err("Titles-Modul nicht gefunden!")
    end
end

-- /gdltest supoff  >> Supporter deaktivieren
local function cmdSupOff()
    GuildDeathLogDB = GuildDeathLogDB or {}
    GuildDeathLogDB.supporter_until = 0
    ok("Supporter deaktiviert")

    -- Nameplates sofort bereinigen
    local Titles = GDL:GetModule("Titles")
    if Titles and Titles.RefreshAllNameplateTitles then
        Titles:RefreshAllNameplateTitles()
        info("Nameplate-Labels ausgeblendet")
    end
end

-- /gdltest supstatus
local function cmdSupStatus()
    sep()
    local active = GDL:IsSupporterActive()
    local until_ts = GDL:GetSupporterUntil()
    p("Supporter-Status: " .. (active and "|cff44FF44AKTIV|r" or "|cffFF4444INAKTIV|r"))
    if until_ts > 0 then
        p("Gültig bis: " .. date("%Y-%m-%d %H:%M:%S", until_ts))
        p("Verbleibend: " .. math.floor((until_ts - time()) / 60) .. " Minuten")
    end
    sep()
end

-- /gdltest mile <id>  >> einzelnen Meilenstein freischalten
local function cmdMile(id)
    if not id or id == "" then
        err("Verwendung: /gdltest mile <meilenstein_id>")
        err("Beispiel:   /gdltest mile level_60")
        return
    end
    local Milestones = GDL:GetModule("Milestones")
    if not Milestones then err("Milestones-Modul nicht geladen!") return end

    local charKey = Milestones:GetCharacterKey()
    if not charKey then err("Character-Key nicht verfuegbar!") return end
    ok("Meilenstein '" .. id .. "' wird freigeschaltet...")
    Milestones:UnlockMilestone(id)
end

-- ============================================================
-- SLASH COMMAND HANDLER (nur wenn nicht im TOC!)
-- ============================================================
SLASH_GDLTEST1 = "/gdltest"
SlashCmdList["GDLTEST"] = function(msg)
    msg = (msg or ""):lower():trim()
    if msg == "" or msg == "help" then
        sep()
        p("=== GDL TestMode ===")
        p("/gdltest sup        - Supporter 1h aktivieren")
        p("/gdltest supoff     - Supporter deaktivieren")
        p("/gdltest supstatus  - Status anzeigen")
        p("/gdltest mile <id>  - Meilenstein freischalten")
        p("/gdltest toast      - Achievement Toast testen")
        p("/gdltest toastguild - Gilden-Toast testen")
        sep()
    elseif msg == "sup" then cmdSup()
    elseif msg == "supoff" then cmdSupOff()
    elseif msg == "supstatus" then cmdSupStatus()
    elseif msg == "toast" then
        local UI = GDL:GetModule("UI")
        if UI and UI.ShowAchievementToast then
            UI:ShowAchievementToast({
                id   = "test_personal",
                name = "Erster Zeuge",
                desc = "Erster Tod eines Gildenmitglieds miterlebt",
                icon = "Interface\\Icons\\Achievement_PVP_A_01",
            }, false)
            ok("Persönlicher Achievement Toast ausgelöst!")
        else
            err("UI-Modul oder ShowAchievementToast nicht verfügbar!")
        end
    elseif msg == "toastguild" then
        local UI = GDL:GetModule("UI")
        if UI and UI.ShowAchievementToast then
            UI:ShowAchievementToast({
                id   = "test_guild",
                name = "Gilden-Trupp",
                desc = "Dungeon mit 3+ Gildenmitgliedern betreten",
                icon = "Interface\\Icons\\Achievement_Dungeon_GloryoftheRaider",
            }, true)
            ok("Gilden-Achievement Toast ausgelöst!")
        else
            err("UI-Modul oder ShowAchievementToast nicht verfügbar!")
        end
    elseif msg:match("^mile%s+") then cmdMile(msg:match("^mile%s+(.+)$"))
    else err("Unbekannt: " .. msg .. " (/gdltest help)")
    end
end

GDL:RegisterModule("TestMode", TestMode)