-- Nombre del archivo: QuestDetailsAudioButton.lua

-- Asegurarse de que VoiceOver está correctamente definido
VoiceOver = VoiceOver or {}
local Addon = VoiceOver
setfenv(1, VoiceOver)
QuestDetailsAudioButton = QuestDetailsAudioButton or {}

-- Función para imprimir mensajes de depuración
local function DebugPrint(message)
    -- print("[QuestDetailsAudioButton] " .. message)
end

-- Función para crear el botón de reproducción
local function CreatePlayButton()
    if not QuestMapFrame or not QuestMapFrame.DetailsFrame then
        -- DebugPrint("Error: QuestMapFrame.DetailsFrame no encontrado")
        return
    end

    local playButton = CreateFrame("Button", "VoiceOverQuestDetailsPlayButton", QuestMapFrame.DetailsFrame,
        "UIPanelButtonTemplate")
    playButton:SetSize(80, 25)
    playButton:SetPoint("TOPRIGHT", QuestMapFrame.DetailsFrame, "TOPRIGHT", -115, -10)
    playButton:SetText("Play Quest VoiceOver")

    -- Personalizar el resplandor (highlight) del botón
    local highlightTexture = playButton:CreateTexture(nil, "HIGHLIGHT")
    highlightTexture:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
    highlightTexture:SetTexCoord(0, 0.625, 0, 0.6875)
    highlightTexture:SetBlendMode("ADD")
    highlightTexture:SetAlpha(0.7) -- Ajustar la intensidad del resplandor
    -- Mover el resplandor hacia la izquierda
    highlightTexture:SetPoint("TOPLEFT", -20, -30)
    highlightTexture:SetPoint("BOTTOMRIGHT", -15, 3)
    playButton:SetHighlightTexture(highlightTexture)

    -- Create and set up the icon
    local icon = playButton:CreateTexture(nil, "ARTWORK")
    icon:SetSize(24, 24)
    icon:SetPoint("LEFT", -5, 0)
    icon:SetTexture("Interface\\AddOns\\AI_VoiceOver\\Textures\\UI-ChatIcon-Share.tga")

    -- Adjust text position to make room for the icon
    playButton:GetFontString():ClearAllPoints()
    playButton:GetFontString():SetPoint("LEFT", icon, "RIGHT", 2, 0)

    playButton:SetScript("OnEnter", function(self)
        GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
        GameTooltip:SetText("Play Audio with VoiceOver")
        GameTooltip:Show()
    end)

    playButton:SetScript("OnLeave", function(self)
        GameTooltip:Hide()
    end)

    playButton:SetScript("OnClick", function(self)
        local questID = QuestMapFrame.DetailsFrame.questID
        if questID then
            if not self.soundData then
                -- DebugPrint("Error: soundData no está definido para la misión " .. questID)
                return
            end

            if self.isPlaying then
                -- DebugPrint("Intentando detener reproducción para misión " .. questID)
                SoundQueue:RemoveSoundFromQueue(self.soundData)
                self:SetText(" Play")
                self.isPlaying = false
            else
                -- DebugPrint("Intentando iniciar reproducción para misión " .. questID)
                SoundQueue:AddSoundToQueue(self.soundData)
                self:SetText(" Stop")
                self.isPlaying = true
            end
            -- DebugPrint("Estado actual de reproducción: " .. (self.isPlaying and "Reproduciendo" or "Detenido"))
        else
            -- DebugPrint("Error: No se pudo obtener el ID de la misión")
        end
    end)

    -- DebugPrint("Botón de reproducción creado exitosamente")
    return playButton
end

-- Función para inicializar el módulo
function QuestDetailsAudioButton:Initialize()
    -- DebugPrint("Iniciando inicialización de QuestDetailsAudioButton")

    -- Crear el botón cuando se cargue el addon
    QuestDetailsAudioButton.playButton = CreatePlayButton()

    -- Asegurarse de que el botón se muestre cuando se abran los detalles de la misión
    hooksecurefunc("QuestMapFrame_ShowQuestDetails", function()
        if QuestDetailsAudioButton.playButton then
            local questID = QuestMapFrame.DetailsFrame.questID
            if questID then
                -- Obtenemos el tipo y el ID del NPC que inicia la misión
                local type, id = DataModules:GetQuestLogQuestGiverTypeAndID(questID)
                local npcName = id and DataModules:GetObjectName(type, id) or "Unknown Name"

                local soundData = {
                    event = Enums.SoundEvent.QuestAccept,
                    questID = questID,
                    name = npcName,
                    title = C_QuestLog.GetTitleForQuestID(questID),
                    unitGUID = id and Enums.GUID:CanHaveID(type) and Utils:MakeGUID(type, id) or nil
                }

                -- Preparar el sonido
                local hasSound = DataModules:PrepareSound(soundData)

                if hasSound then
                    QuestDetailsAudioButton.playButton.soundData = soundData
                    QuestDetailsAudioButton.playButton:Enable()
                    QuestDetailsAudioButton.playButton:SetText("Play")
                    QuestDetailsAudioButton.playButton:GetRegions():SetDesaturated(false)
                    -- DebugPrint("Audio preparado para misión " .. questID)
                else
                    -- DebugPrint("No se encontró audio para misión " .. questID)
                    QuestDetailsAudioButton.playButton:Disable()
                    QuestDetailsAudioButton.playButton:SetText("No audio")
                    QuestDetailsAudioButton.playButton:GetRegions():SetDesaturated(true)
                end
            end
            QuestDetailsAudioButton.playButton:Show()
        end
    end)

    -- DebugPrint("QuestDetailsAudioButton inicializado completamente")
end

-- Inicializar el módulo
QuestDetailsAudioButton:Initialize()
