-- Asegurar que VoiceOver esté definido
VoiceOver = VoiceOver or {}
setfenv(1, VoiceOver)

-- Definir colores
local CYAN = "|cFF00FFFF"
local GREEN = "|cFF00FF00"
local RED = "|cFFFF0000"
local RESET = "|r"

-- Confirmar carga del módulo
print(CYAN .. "[CampanaScanner]: Módulo cargado correctamente." .. RESET)

-- Crear un frame grande e interactivo para mostrar resultados
local analysisFrame = CreateFrame("Frame", "CampanaAnalysisFrame", UIParent, "BasicFrameTemplateWithInset")
analysisFrame:SetSize(800, 600)
analysisFrame:SetPoint("CENTER")
analysisFrame:SetMovable(true)
analysisFrame:EnableMouse(true)
analysisFrame:RegisterForDrag("LeftButton")
analysisFrame:SetScript("OnDragStart", analysisFrame.StartMoving)
analysisFrame:SetScript("OnDragStop", analysisFrame.StopMovingOrSizing)
analysisFrame:Hide()

-- Título del frame
local analysisTitle = analysisFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge")
analysisTitle:SetPoint("TOP", 0, -10)
analysisTitle:SetText("CampanaScanner: Análisis de Íconos del QuestFrame")

-- ScrollFrame para el texto
local scrollFrame = CreateFrame("ScrollFrame", nil, analysisFrame, "UIPanelScrollFrameTemplate")
scrollFrame:SetPoint("TOPLEFT", 10, -40)
scrollFrame:SetPoint("BOTTOMRIGHT", -30, 10)

-- EditBox para mostrar el contenido analizado
local editBox = CreateFrame("EditBox", nil, scrollFrame)
editBox:SetMultiLine(true)
editBox:SetFontObject("GameFontHighlight")
editBox:SetWidth(750)
editBox:SetAutoFocus(false)
editBox:EnableMouse(true)
editBox:SetScript("OnEscapePressed", function(self) self:ClearFocus() end)

-- Conectar el EditBox con el ScrollFrame
scrollFrame:SetScrollChild(editBox)

-- Botón para cerrar el frame
local closeButton = CreateFrame("Button", nil, analysisFrame, "GameMenuButtonTemplate")
closeButton:SetSize(100, 30)
closeButton:SetPoint("BOTTOM", 0, 10)
closeButton:SetText("Cerrar")
closeButton:SetNormalFontObject("GameFontNormal")
closeButton:SetHighlightFontObject("GameFontHighlight")
closeButton:SetScript("OnClick", function()
    analysisFrame:Hide()
end)

-- Mostrar texto en el frame grande
local function ShowAnalysisFrame(content)
    editBox:SetText(content)
    editBox:HighlightText(0, 0)
    analysisFrame:Show()
end

-- Función para imprimir mensajes de depuración
local function CampanaScannerDebugPrint(message)
    print(CYAN .. "[CampanaScanner Debug]: " .. message .. RESET)
end

-- Verificar si un tooltip contiene el texto "campaña"
local function CheckTooltipForCampaign(iconFrame)
    local tooltip = CreateFrame("GameTooltip", "CampanaTooltipScanner", UIParent, "GameTooltipTemplate")
    tooltip:SetOwner(UIParent, "ANCHOR_NONE")
    tooltip:SetFrameStrata("TOOLTIP")
    tooltip:SetFrameLevel(999)

    tooltip:SetPoint("CENTER")
    tooltip:ClearLines()
    tooltip:SetOwner(iconFrame, "ANCHOR_CURSOR")
    tooltip:Show()

    for i = 1, tooltip:NumLines() do
        local text = _G["CampanaTooltipScannerTextLeft" .. i]:GetText()
        if text and string.find(text:lower(), "campaña") then
            CampanaScannerDebugPrint(GREEN .. "¡Ícono de campaña detectado mediante tooltip!" .. RESET)
            tooltip:Hide()
            return true
        end
    end

    tooltip:Hide()
    return false
end

-- Recorrer los elementos hijos de un frame y buscar texturas
local function ScanForIcons(frame)
    local output = ""
    for i = 1, frame:GetNumChildren() do
        local child = select(i, frame:GetChildren())
        if child and child:GetObjectType() == "Texture" then
            local isCampaignIcon = CheckTooltipForCampaign(child)
            if isCampaignIcon then
                output = output .. "¡Ícono de campaña encontrado en este frame!\n"
            end
        end
    end
    return output
end

-- Analizar el QuestFrame
local function AnalyzeQuestFrameForIcons()
    local questFrame = QuestFrame
    if not questFrame then
        CampanaScannerDebugPrint(RED .. "No se encontró el QuestFrame." .. RESET)
        return
    end

    CampanaScannerDebugPrint("Buscando íconos en el QuestFrame usando tooltips...")
    local content = ScanForIcons(questFrame)
    ShowAnalysisFrame(content)
end

-- Comando slash para pruebas manuales
SLASH_CAMPANASCANNER1 = "/campana"
SlashCmdList["CAMPANASCANNER"] = function(msg)
    if msg == "icons" then
        AnalyzeQuestFrameForIcons()
    else
        print(CYAN .. "[CampanaScanner]: Usa /campana icons para buscar íconos de campaña." .. RESET)
    end
end
