setfenv(1, VoiceOver)

ItemAdapter = {}

local isActive = false
local playedItems = {}

-- Función para extraer ItemID de un itemLink
local function GetItemIDFromLink(itemLink)
    if not itemLink then return nil end
    local itemID = itemLink:match("item:(%d+)")
    return tonumber(itemID)
end

-- Función para buscar el item en los lookups
local function FindItemData(itemID)
    print("|cff00ff00[Item]|r Buscando ItemID:", itemID)

    -- Buscar en todos los módulos de datos registrados
    for _, module in ipairs(DataModules.registeredModulesOrdered) do
        if module.ItemLookupByItemID then
            local itemData = module.ItemLookupByItemID[itemID]

            if itemData then
                print("|cff00ff00[Item]|r ¡Item encontrado en lookup!")
                return itemData.text, itemData.iconID, itemData.name
            end
        end
    end

    print("|cffff0000[Item]|r No se encontró ItemID en lookup:", itemID)
    return nil, nil, nil
end

-- Función para manejar CHAT_MSG_LOOT
local function OnLootMessage(message)
    if not isActive then
        print("|cffff0000[Item]|r Adapter NO está activo")
        return
    end

    print("|cff00ff00[Item]|r Mensaje de loot recibido:", message)

    -- Extraer itemLink del mensaje
    local itemLink = message:match("|H(item:[^|]+)|h")

    if not itemLink then
        return
    end

    local itemID = GetItemIDFromLink(itemLink)

    if not itemID then
        print("|cffff0000[Item]|r No se pudo extraer ItemID del link")
        return
    end

    -- Verificar si ya se reprodujo este item
    if playedItems[itemID] then
        print("|cffffff00[Item]|r Item ya reproducido:", itemID)
        return
    end

    -- Buscar item en lookup
    local itemText, iconID, itemNameFromLookup = FindItemData(itemID)

    if not itemText then
        print("|cffff0000[Item]|r No hay audio para este item:", itemID)
        return
    end

    -- Obtener información del item
    local itemName = itemNameFromLookup or GetItemInfo(itemID)

    if not itemName then
        print("|cffff0000[Item]|r No se pudo obtener información del item:", itemID)
        return
    end

    -- Usar ItemID como nombre de archivo
    local fileName = tostring(itemID)

    -- Obtener duración del sonido
    local duration = DataModules:GetSoundLength(fileName)
    if not duration then
        duration = 10 -- Duración por defecto
        print("|cffffff00[Item]|r Usando duración por defecto:", duration)
    else
        print("|cff00ff00[Item]|r Duración del sonido:", duration)
    end

    -- Crear soundData completo (igual que Dialogue)
    local soundData = {
        event = Enums.SoundEvent.ItemReceived,
        name = itemName, -- Nombre del item (se muestra arriba en el retrato)
        title = itemText, -- Texto descriptivo completo (se muestra en el botón)
        text = itemText, -- Mismo texto descriptivo
        fileName = fileName,
        filePath = format([[Interface\AddOns\AI_VoiceOverData_Midnight_esMX\generated\sounds\items\%s.mp3]], fileName),
        length = duration,
        iconID = iconID, -- Agregar iconID para mostrar en el retrato
    }

    print("|cff00ff00[Item]|r Creado soundData - filePath:", soundData.filePath)

    -- Preparar y encolar el sonido
    if DataModules:PrepareSound(soundData) then
        print("|cff00ff00[Item]|r Sonido preparado, añadiendo a la cola")
        SoundQueue:AddSoundToQueue(soundData)
        playedItems[itemID] = true
    else
        print("|cffff0000[Item]|r Fallo al preparar sonido")
    end
end

-- Frame para eventos
local frame = CreateFrame("Frame")
frame:RegisterEvent("CHAT_MSG_LOOT")

frame:SetScript("OnEvent", function(self, event, ...)
    if event == "CHAT_MSG_LOOT" then
        local message = ...
        OnLootMessage(message)
    end
end)

-- Funciones de activación/desactivación
function ItemAdapter:Activate()
    isActive = true

end

function ItemAdapter:Deactivate()
    isActive = false
    print("|cffff0000[ItemAdapter]|r Desactivado")
end

function ItemAdapter:Reset()
    playedItems = {}
    print("|cff00ff00[ItemAdapter]|r Items reproducidos reseteados")
end
