import { slotDataManager } from "../utils/slotDataManager.js";
import { pokemonUtils } from "../utils/pokemonUtils.js";
// Função de teste para verificar o funcionamento do sistema
export function testarSistemaSlots(player) {
    console.log("=== TESTE DO SISTEMA DE SLOTS ===");
    // Teste 1: Dados de exemplo
    const pokemonTeste = {
        health: 100,
        level: 50,
        xp: 1250,
        owner: "player123", // Exemplo de dono
        attack: 150,
        defense: 120,
        speed: 110,
        spAttack: 130,
        spDefense: 115,
        typeId: "pr:charizard",
        name: "Charizard",
        move1: "pr:flamethrower",
        move2: "pr:dragon_claw",
        move3: "pr:earthquake",
        move4: "pr:solar_beam"
    };
    console.log("Dados originais:", pokemonTeste);
    // Teste 2: Codificação
    try {
        const dadosCodeificados = slotDataManager.encodePokemonSlotData(pokemonTeste);
        console.log(`Dados codificados: ${dadosCodeificados}`);
        console.log(`Tamanho: ${dadosCodeificados.length}/255 caracteres`);
        // Teste 3: Decodificação
        const dadosDecodificados = slotDataManager.decodePokemonSlotData(dadosCodeificados);
        console.log("Dados decodificados:", dadosDecodificados);
        // Teste 4: Verificar se são iguais
        const saoIguais = JSON.stringify(pokemonTeste) === JSON.stringify(dadosDecodificados);
        console.log(`Dados são iguais: ${saoIguais}`);
        // Teste 5: Armazenar no slot
        slotDataManager.setPokemonSlotData(player, 0, pokemonTeste);
        console.log("Dados armazenados no slot 0");
        // Teste 6: Recuperar do slot
        const dadosRecuperados = slotDataManager.getPokemonSlotData(player, 0);
        console.log("Dados recuperados:", dadosRecuperados);
        // Teste 7: Verificar integridade
        const integridadeOk = JSON.stringify(pokemonTeste) === JSON.stringify(dadosRecuperados);
        console.log(`Integridade dos dados: ${integridadeOk ? "OK" : "FALHA"}`);
        player.onScreenDisplay.setActionBar("Teste concluído - veja o console");
    }
    catch (error) {
        console.error("Erro no teste:", error);
        player.onScreenDisplay.setActionBar("Erro no teste - veja o console");
    }
}
// Teste com Pokémon com nomes muito longos
export function testarPokemonNomesLongos(player) {
    console.log("=== TESTE COM NOMES LONGOS ===");
    const pokemonNomeLongo = {
        health: 80,
        level: 35,
        xp: 800,
        owner: "player123", // Exemplo de dono
        attack: 120,
        defense: 90,
        speed: 100,
        spAttack: 130,
        spDefense: 110,
        typeId: "pr:10_000_000_volt_thunderbolt", // TypeID longo
        name: "10,000,000 Volt Thunderbolt", // Nome mais legível
        move1: "pr:10_000_000_volt_thunderbolt",
        move2: "pr:devastating_drake",
        move3: "pr:continental_crush",
        move4: "pr:never_ending_nightmare"
    };
    try {
        const dadosCodeificados = slotDataManager.encodePokemonSlotData(pokemonNomeLongo);
        console.log(`Dados com nomes longos codificados: ${dadosCodeificados}`);
        console.log(`Tamanho: ${dadosCodeificados.length}/255 caracteres`);
        // Verificar se ainda funciona
        const dadosDecodificados = slotDataManager.decodePokemonSlotData(dadosCodeificados);
        console.log("Decodificação bem-sucedida:", dadosDecodificados);
        player.onScreenDisplay.setActionBar("Teste de nomes longos concluído");
    }
    catch (error) {
        console.error("Erro com nomes longos:", error);
        player.onScreenDisplay.setActionBar("Erro com nomes longos");
    }
}
// Teste de stress - múltiplos slots
export function testeStress(player) {
    console.log("=== TESTE DE STRESS ===");
    const pokemonsExemplo = [
        {
            health: 45, level: 5, xp: 0,
            typeId: "pr:bulbassaur", name: "Bulbasaur",
            owner: "player123", // Exemplo de dono
            attack: 49, defense: 49, speed: 45, spAttack: 65, spDefense: 65,
            move1: "pr:tackle", move2: "pr:growl", move3: "pr:leech_seed", move4: "pr:vine_whip"
        },
        {
            health: 39, level: 5, xp: 0,
            typeId: "pr:charmander", name: "Charmander",
            owner: "player123", // Exemplo de dono
            attack: 52, defense: 43, speed: 65, spAttack: 60, spDefense: 50,
            move1: "pr:scratch", move2: "pr:growl", move3: "pr:ember", move4: "pr:smokescreen"
        },
        {
            health: 44, level: 5, xp: 0,
            typeId: "pr:squirtle", name: "Squirtle",
            owner: "player123", // Exemplo de dono
            attack: 48, defense: 65, speed: 43, spAttack: 50, spDefense: 64,
            move1: "pr:tackle", move2: "pr:tail_whip", move3: "pr:water_gun", move4: "pr:withdraw"
        },
        {
            health: 35, level: 5, xp: 0,
            typeId: "pr:pikachu", name: "Pikachu",
            owner: "player123", // Exemplo de dono
            attack: 55, defense: 40, speed: 90, spAttack: 50, spDefense: 50,
            move1: "pr:thunder_shock", move2: "pr:growl", move3: "pr:quick_attack", move4: "pr:thunder_wave"
        },
        {
            health: 40, level: 5, xp: 0,
            typeId: "pr:psyduck", name: "Psyduck",
            owner: "player123", // Exemplo de dono
            attack: 52, defense: 48, speed: 55, spAttack: 65, spDefense: 50,
            move1: "pr:water_gun", move2: "pr:tail_whip", move3: "pr:disable", move4: "pr:confusion"
        },
        {
            health: 50, level: 5, xp: 0,
            typeId: "pr:machop", name: "Machop",
            owner: "player123", // Exemplo de dono
            attack: 80, defense: 50, speed: 35, spAttack: 35, spDefense: 35,
            move1: "pr:karate_chop", move2: "pr:leer", move3: "pr:focus_energy", move4: "pr:seismic_toss"
        }
    ];
    try {
        // Armazenar todos os Pokémon
        pokemonsExemplo.forEach((pokemon, index) => {
            slotDataManager.setPokemonSlotData(player, index, pokemon);
            console.log(`Slot ${index} preenchido com ${pokemon.name}`);
        });
        // Verificar todos os slots
        const todosSlots = slotDataManager.getAllPokemonSlots(player);
        console.log("Todos os slots:", todosSlots);
        // Calcular tamanho total usado
        let tamanhoTotal = 0;
        todosSlots.forEach((slot, index) => {
            if (slot) {
                const encoded = slotDataManager.encodePokemonSlotData(slot);
                tamanhoTotal += encoded.length;
                console.log(`Slot ${index}: ${encoded.length} caracteres`);
            }
        });
        console.log(`Tamanho total usado: ${tamanhoTotal} caracteres`);
        console.log(`Média por slot: ${Math.round(tamanhoTotal / 6)} caracteres`);
        player.onScreenDisplay.setActionBar("Teste de stress concluído");
    }
    catch (error) {
        console.error("Erro no teste de stress:", error);
        player.onScreenDisplay.setActionBar("Erro no teste de stress");
    }
}
// Teste para verificar tratamento de typeId inválido
export function testarTypeIdInvalido(player) {
    console.log("=== TESTE TYPEID INVÁLIDO ===");
    try {
        // Teste com typeId undefined
        const nome1 = pokemonUtils.getPokemonNameFromTypeId(undefined);
        console.log(`TypeId undefined: ${nome1}`);
        // Teste com typeId null
        const nome2 = pokemonUtils.getPokemonNameFromTypeId(null);
        console.log(`TypeId null: ${nome2}`);
        // Teste com typeId vazio
        const nome3 = pokemonUtils.getPokemonNameFromTypeId("");
        console.log(`TypeId vazio: ${nome3}`);
        // Teste com typeId válido
        const nome4 = pokemonUtils.getPokemonNameFromTypeId("pr:charmander");
        console.log(`TypeId válido: ${nome4}`);
        // Teste com typeId sem prefixo
        const nome5 = pokemonUtils.getPokemonNameFromTypeId("charmander");
        console.log(`TypeId sem prefixo: ${nome5}`);
        player.onScreenDisplay.setActionBar("Teste TypeId inválido concluído");
    }
    catch (error) {
        console.error("Erro no teste TypeId inválido:", error);
        player.onScreenDisplay.setActionBar("Erro no teste TypeId inválido");
    }
}
// Teste específico para debug do rename
export function testarRenamePokemon(player, slotIndex = 0) {
    console.log("=== TESTE DEBUG RENAME POKEMON ===");
    // Primeiro, verificar se há dados no slot
    pokemonUtils.debugSlotData(player, slotIndex);
    // Verificar e corrigir dados antigos
    console.log(`[DEBUG] Verificando dados antigos no slot ${slotIndex}...`);
    const legacyFixed = pokemonUtils.checkAndFixLegacyData(player, slotIndex);
    console.log(`[DEBUG] Dados antigos corrigidos: ${legacyFixed}`);
    // Tentar spawnar um Pokemon no slot se estiver vazio
    const pokemonData = pokemonUtils.getPokemonFromSlot(player, slotIndex);
    if (!pokemonData) {
        console.log(`[DEBUG] Slot ${slotIndex} está vazio, criando Pokemon de teste...`);
        const success = pokemonUtils.capturePokemon(player, "pr:charmander", 5);
        console.log(`[DEBUG] Captura test: ${success}`);
        if (success) {
            console.log(`[DEBUG] Pokemon criado, verificando dados novamente...`);
            pokemonUtils.debugSlotData(player, slotIndex);
        }
    }
    // Agora tentar renomear
    console.log(`[DEBUG] Tentando renomear Pokemon no slot ${slotIndex}...`);
    pokemonUtils.renamePokemon(player, slotIndex, "TesteRename");
}
// Função para executar todos os testes
export function executarTodosOsTestes(player) {
    console.log("=== EXECUTANDO TODOS OS TESTES ===");
    setTimeout(() => testarSistemaSlots(player), 1000);
    setTimeout(() => testarPokemonNomesLongos(player), 3000);
    setTimeout(() => testeStress(player), 5000);
    setTimeout(() => testarTypeIdInvalido(player), 7000);
    setTimeout(() => testarRenamePokemon(player, 0), 9000);
    player.onScreenDisplay.setActionBar("Executando testes... veja o console");
}
