local addonName, addon = ...

--------------------------------------------------
-- VISIBILITY OPTIONEN
--
-- Zentrale Liste fuer das Dropdown in Settings.lua.
--------------------------------------------------

addon.VISIBILITY_OPTIONS = {
    { key = "always",    label = "Always Visible" },
    { key = "mouseover", label = "Visible on Mouseover" },
    { key = "never",     label = "Never" },
    { key = "group",     label = "Only Visible when in a Group" },
}

--------------------------------------------------
-- INHALT EIN-/AUSBLENDEN
--
-- "panel" selbst bleibt IMMER Shown (siehe Core.lua
-- ApplySettings) -- es dient als fixer Hit-Bereich fuer die
-- Mouseover-Erkennung unten und muss fuer EllesmereUIs
-- Unlock Mode jederzeit auffindbar sein.
--
-- Tatsaechlich ein-/ausgeblendet werden nur "visual"
-- (Hintergrund/Rahmen) und "content" (Pull/Ready/Marker-
-- Buttons). Das entfernt gleichzeitig auch die Klickbarkeit
-- der darin liegenden secure Buttons, da WoW Kindelemente
-- eines ausgeblendeten Frames nicht interaktiv laesst.
--------------------------------------------------

function addon:SetPanelContentVisible(visible)
    if self.visual then
        self.visual:SetShown(visible)
    end

    if self.content then
        self.content:SetShown(visible)
    end
end

--------------------------------------------------
-- MOUSEOVER-ERKENNUNG
--
-- Bewusst per Ticker + IsMouseOver() statt OnEnter/OnLeave:
-- letztere koennen zwischen ueberlappenden Buttons und dem
-- Panel-Hintergrund flackern, IsMouseOver() prueft dagegen
-- einfach nur die Panel-Flaeche gegen die Cursorposition.
--------------------------------------------------

function addon:StopVisibilityTicker()
    if self.visibilityTicker then
        self.visibilityTicker:Cancel()
        self.visibilityTicker = nil
    end
end

function addon:UpdateMouseoverVisibility()
    if not self.panel then
        return
    end

    local db = CompactUtilityPanelDB

    if not db or db.visibility ~= "mouseover" then
        self:StopVisibilityTicker()
        return
    end

    local isOver = self.panel:IsMouseOver()

    if isOver ~= self.mouseoverShown then
        self.mouseoverShown = isOver
        self:SetPanelContentVisible(isOver)
    end
end

--------------------------------------------------
-- ZENTRALE AKTUALISIERUNG
--
-- Wird beim Login (Core.lua:ApplySettings), bei jeder
-- Aenderung im Dropdown (Settings.lua) und bei Gruppen-
-- Events (unten) aufgerufen.
--------------------------------------------------

function addon:UpdateVisibility()
    if not self.panel then
        return
    end

    self:StopVisibilityTicker()

    local db = CompactUtilityPanelDB
    local mode = (db and db.visibility) or "always"

    if mode == "never" then
        self:SetPanelContentVisible(false)

    elseif mode == "mouseover" then
        self.mouseoverShown = false
        self:SetPanelContentVisible(false)

        self.visibilityTicker = C_Timer.NewTicker(0.2, function()
            addon:UpdateMouseoverVisibility()
        end)

    elseif mode == "group" then
        self:SetPanelContentVisible(IsInGroup() and true or false)

    else -- "always" und Fallback bei unbekanntem Wert
        self:SetPanelContentVisible(true)
    end
end

--------------------------------------------------
-- GRUPPEN-EVENTS ("Only Visible when in a Group")
--------------------------------------------------

local eventFrame = CreateFrame("Frame")

eventFrame:RegisterEvent("GROUP_ROSTER_UPDATE")
eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")

eventFrame:SetScript("OnEvent", function()
    local db = CompactUtilityPanelDB

    if db and db.visibility == "group" and addon.UpdateVisibility then
        addon:UpdateVisibility()
    end
end)
