const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js');
const { generateLinkCode, getUserLink } = require('../../src/core/database.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('lier-rygainland')
        .setDescription('Lier votre compte Discord à votre compte Palworld'),
    
    async execute(interaction) {
        try {
            console.log('=== [LIER-RYGAINLAND] Début de l\'exécution ===');
            console.log('[LIER-RYGAINLAND] Utilisateur:', interaction.user.tag, '(ID:', interaction.user.id + ')');
            
            console.log('[LIER-RYGAINLAND] Vérification des liaisons existantes...');
            const existingLink = await getUserLink(interaction.user.id);
            console.log('[LIER-RYGAINLAND] Liaison existante:', existingLink);
            if (existingLink) {
                console.log('[LIER-RYGAINLAND] ⚠️ Utilisateur déjà lié à:', existingLink.palworld_username);
                return interaction.reply({
                    content: `Vous êtes déjà lié au compte Palworld: **${existingLink.palworld_username}** (Steam ID: ${existingLink.steam_id})`,
                    flags: MessageFlags.Ephemeral
                });
            }

            console.log('[LIER-RYGAINLAND] Génération d\'un nouveau code de liaison...');
            const code = await generateLinkCode(interaction.user.id);
            console.log('[LIER-RYGAINLAND] ✅ Code généré:', code);

            const embed = new EmbedBuilder()
                .setColor(0x00FF00)
                .setTitle('🔗 Liaison de compte Rygainland')
                .setDescription('Pour lier votre compte Discord à votre compte Palworld:')
                .addFields(
                    { name: '1️⃣ Étape 1', value: 'Connectez-vous sur le serveur Palworld' },
                    { name: '2️⃣ Étape 2', value: `Tapez dans le chat du jeu:\n\`\`\`!lier ${code}\`\`\`` },
                    { name: '⏱️ Expiration', value: 'Ce code expire dans **10 minutes**' },
                    { name: '🔑 Votre code', value: `\`${code}\``, inline: false }
                )
                .setFooter({ text: 'Le système de surveillance démarre automatiquement' })
                .setTimestamp();

            console.log('[LIER-RYGAINLAND] Envoi de l\'embed avec le code...');
            await interaction.reply({ embeds: [embed], flags: MessageFlags.Ephemeral });
            console.log('[LIER-RYGAINLAND] ✅ Réponse envoyée avec succès');
            console.log('[LIER-RYGAINLAND] Le système WebSocket va surveiller le code:', code);
            
            // Le système checkAndManageWebSocket va détecter le nouveau code automatiquement

        } catch (error) {
            console.error('[LIER-RYGAINLAND] ❌ ERREUR CRITIQUE:', error);
            console.error('[LIER-RYGAINLAND] Stack trace:', error.stack);
            await interaction.reply({
                content: '❌ Une erreur est survenue lors de la génération du code.',
                flags: MessageFlags.Ephemeral
            }).catch(err => console.error('[LIER-RYGAINLAND] Impossible de répondre:', err));
        }
    },
};
