-------------------------
-- AiB SimC Reminder
-- Erinnert Gildenmitglieder daran, ihre Sims hochzuladen
-- Aktiv an Raid-Tagen (So/Mi/Do) zwischen 18:45 und 19:30
-------------------------

local GILDENNAME = "All into Boss"
local TAGE = { [1]=true, [4]=true, [5]=true }  -- 1=So, 4=Mi, 5=Do

-- Korrekte Pfade: Sounds in sounds/, Bilder in textures/
local SOUND1 = "Interface\\AddOns\\aib\\sounds\\reminder\\vogel.ogg"
local SOUND2 = "Interface\\AddOns\\aib\\sounds\\reminder\\panter.ogg"
local BILD1  = "Interface\\AddOns\\aib\\textures\\reminder\\aib_early.tga"
local BILD2  = "Interface\\AddOns\\aib\\textures\\reminder\\aib_late.tga"

local hochgeladen   = false
local timerGesetzt  = false
local warGildenmitglied = nil  -- Merkt sich letzten Gildenstatus (nil = noch unbekannt)

------------------------------------------------------------
-- BILD ANZEIGEN
------------------------------------------------------------
local function ZeigeBild(bild)
    if not SimcBildFrame then
        SimcBildFrame = CreateFrame("Frame", "SimcBildFrame", UIParent)
        SimcBildFrame:SetSize(512, 256)
        SimcBildFrame:SetPoint("CENTER", 0, 150)
        SimcBildFrame:SetFrameStrata("DIALOG")
        SimcBildFrame.tex = SimcBildFrame:CreateTexture(nil, "ARTWORK")
        SimcBildFrame.tex:SetAllPoints()
        SimcBildFrame:SetScript("OnMouseDown", function(self) self:Hide() end)
    end
    SimcBildFrame.tex:SetTexture(bild)
    SimcBildFrame:Show()
end

------------------------------------------------------------
-- POPUPS
------------------------------------------------------------
local function ZeigePopup1()
    StaticPopupDialogs["SIMC_REMINDER_1"] = {
        text = "Sims aktuell? Die Zeit läuft!",
        button1 = "Erledigt!",
        OnAccept = function()
            hochgeladen = true
            if SimcBildFrame then SimcBildFrame:Hide() end
        end,
        timeout = 0,
        whileDead = true,
        hideOnEscape = false,
    }
    StaticPopup_Show("SIMC_REMINDER_1")
    PlaySoundFile(SOUND1, "Master")
    ZeigeBild(BILD1)
end

local function ZeigePopup2()
    if hochgeladen then return end
    StaticPopupDialogs["SIMC_REMINDER_2"] = {
        text = "Leider zu spät zum Sim uploaden!",
        button1 = "Ok",
        OnAccept = function()
            if SimcBildFrame then SimcBildFrame:Hide() end
        end,
        timeout = 0,
        whileDead = true,
        hideOnEscape = false,
    }
    StaticPopup_Show("SIMC_REMINDER_2")
    PlaySoundFile(SOUND2, "Master")
    ZeigeBild(BILD2)
end

------------------------------------------------------------
-- HAUPTLOGIK
------------------------------------------------------------
local function IstGildenmitglied()
    return GetGuildInfo("player") == GILDENNAME
end

local function PruefeUndPlane()
    if not IstGildenmitglied() then return end

    local t = C_DateAndTime.GetCurrentCalendarTime()
    if not TAGE[t.weekday] then return end

    local jetzt = t.hour * 60 + t.minute
    local t1    = 18 * 60 + 45   -- 18:45
    local t2    = 19 * 60        -- 19:00
    local t3    = 19 * 60 + 30   -- 19:30

    if jetzt < t1 and not timerGesetzt then
        timerGesetzt = true
        C_Timer.After((t1 - jetzt) * 60, ZeigePopup1)
        C_Timer.After((t2 - jetzt) * 60, ZeigePopup2)

    elseif jetzt >= t1 and jetzt < t2 then
        timerGesetzt = true  -- Verhindert Doppel-Timer falls Event nochmal feuert
        ZeigePopup1()
        C_Timer.After((t2 - jetzt) * 60, ZeigePopup2)

    elseif jetzt >= t2 and jetzt < t3 then
        timerGesetzt = true
        ZeigePopup2()

    else
    end
end

------------------------------------------------------------
-- EVENT HANDLER
-- Fix: PLAYER_GUILD_UPDATE nur reagieren wenn sich
-- der Gildenstatus tatsächlich geändert hat
------------------------------------------------------------
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_LOGIN")
f:RegisterEvent("PLAYER_GUILD_UPDATE")
f:SetScript("OnEvent", function(self, event)
    if event == "PLAYER_LOGIN" then
        -- Kurz warten bis Gildeninfo vom Server geladen ist
        C_Timer.After(2, function()
            warGildenmitglied = IstGildenmitglied()
            PruefeUndPlane()
        end)

    elseif event == "PLAYER_GUILD_UPDATE" then
        local jetzt = IstGildenmitglied()
        -- Nur reagieren wenn sich der Status wirklich geändert hat
        -- (Event feuert auch bei Roster-Updates, Rangsänderungen usw.)
        if jetzt ~= warGildenmitglied then
            warGildenmitglied = jetzt
            timerGesetzt = false
            hochgeladen  = false
            PruefeUndPlane()
        end
    end
end)
