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

module.exports = {
    data: new SlashCommandBuilder()
        .setName('delier')
        .setDescription('Délier un compte Discord de son compte Palworld (Admin)')
        .addUserOption(option =>
            option.setName('compte-discord')
                .setDescription('Le compte Discord à délier')
                .setRequired(true)),
    
    async execute(interaction) {
        try {
            const discordUser = interaction.options.getUser('compte-discord');

            const existingLink = await getUserLink(discordUser.id);

            if (!existingLink) {
                const embed = new EmbedBuilder()
                    .setColor(0xFF9900)
                    .setTitle('⚠️ Aucune liaison trouvée')
                    .setDescription(`Le compte <@${discordUser.id}> n'est pas lié à un compte Palworld.`)
                    .setTimestamp();

                return interaction.reply({ embeds: [embed]});
            }

            // Afficher un embed de confirmation avec boutons
            const confirmEmbed = new EmbedBuilder()
                .setColor(0xFF6600)
                .setTitle('⚠️ Confirmation de déliaison (Admin)')
                .setDescription(`Êtes-vous sûr de vouloir délier ce compte ?`)
                .addFields(
                    { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false },
                    { name: '🎮 Palworld', value: `**${existingLink.palworld_username}**`, inline: true },
                    { name: '🆔 Steam ID', value: `\`${existingLink.steam_id}\``, inline: true },
                    { name: '🎯 Player ID', value: `\`${existingLink.player_id || 'N/A'}\``, inline: false }
                )
                .setFooter({ text: 'Cette action est irréversible' })
                .setTimestamp();

            const row = new ActionRowBuilder()
                .addComponents(
                    new ButtonBuilder()
                        .setCustomId('admin_confirm_unlink')
                        .setLabel('✅ Confirmer la déliaison')
                        .setStyle(ButtonStyle.Danger),
                    new ButtonBuilder()
                        .setCustomId('admin_cancel_unlink')
                        .setLabel('❌ Annuler')
                        .setStyle(ButtonStyle.Secondary)
                );

            const response = await interaction.reply({
                embeds: [confirmEmbed],
                components: [row]
            });

            const collectorFilter = i => i.user.id === interaction.user.id;
            
            try {
                const confirmation = await response.awaitMessageComponent({ 
                    filter: collectorFilter, 
                    time: 60000 
                });

                if (confirmation.customId === 'admin_confirm_unlink') {
                    await deleteUserLink(discordUser.id);

                    // Retirer le rôle de joueur lié
                    try {
                        const guild = interaction.guild;
                        const member = await guild.members.fetch(discordUser.id);
                        const linkedRole = guild.roles.cache.get('1467491093649035475');
                        if (linkedRole && member.roles.cache.has(linkedRole.id)) {
                            await member.roles.remove(linkedRole);
                            console.log(`✅ Rôle retiré de ${discordUser.tag}`);
                        }
                    } catch (roleError) {
                        console.error('Erreur lors du retrait du rôle:', roleError);
                    }

                    const successEmbed = new EmbedBuilder()
                        .setColor(0x00FF00)
                        .setTitle('✅ Liaison supprimée')
                        .setDescription(`Le compte Discord a été délié avec succès.`)
                        .addFields(
                            { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false },
                            { name: '🎮 Palworld (ancien)', value: existingLink.palworld_username, inline: true },
                            { name: '🆔 Steam ID (ancien)', value: `\`${existingLink.steam_id}\``, inline: true }
                        )
                        .setTimestamp();

                    await discordUser.send(
                        `🔓 **Liaison supprimée**\n\n` +
                        `Votre compte Discord a été délié de votre compte Palworld par un administrateur.\n` +
                        `Vous pouvez vous lier à nouveau avec \`/lier-rygainland\`.`
                    ).catch(() => {});

                    await confirmation.update({
                        embeds: [successEmbed],
                        components: []
                    });

                } else if (confirmation.customId === 'admin_cancel_unlink') {
                    const cancelEmbed = new EmbedBuilder()
                        .setColor(0x808080)
                        .setTitle('❌ Déliaison annulée')
                        .setDescription('La liaison n\'a pas été modifiée.')
                        .setTimestamp();

                    await confirmation.update({
                        embeds: [cancelEmbed],
                        components: []
                    });
                }

            } catch (error) {
                const timeoutEmbed = new EmbedBuilder()
                    .setColor(0x808080)
                    .setTitle('⏱️ Temps écoulé')
                    .setDescription('La demande de déliaison a expiré. La liaison n\'a pas été modifiée.')
                    .setTimestamp();

                await interaction.editReply({
                    embeds: [timeoutEmbed],
                    components: []
                });
            }

        } catch (error) {
            console.error('Erreur lors de la suppression de la liaison:', error);
            await interaction.reply({
                content: '❌ Une erreur est survenue lors de la suppression de la liaison.',
                flags: MessageFlags.Ephemeral
            }).catch(() => {
                interaction.editReply({
                    content: '❌ Une erreur est survenue lors de la suppression de la liaison.',
                    flags: MessageFlags.Ephemeral
                });
            });
        }
    },
};
