const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const db = require('../../functions/database/db.js');

module.exports = {
    category: 'moderation',
    data: new SlashCommandBuilder()
        .setName('casier')
        .setDescription('Voir toutes les sanctions d’un membre.')
        .addUserOption(option =>
            option.setName('membre')
                .setDescription('Le membre dont tu veux voir le casier')
                .setRequired(true)),

    async execute(interaction) {
        await interaction.deferReply();

        const member = interaction.options.getUser('membre');

        try {
            const [rows] = await db.query(
                'SELECT * FROM logs WHERE userId = ? ORDER BY timestamp DESC',
                [member.id]
            );

            if (!rows.length) return interaction.editReply(`❌ ${member.tag} n’a aucune sanction.`);

            // Découpe les sanctions en pages de 25
            const pages = [];
            for (let i = 0; i < rows.length; i += 10) {
                pages.push(rows.slice(i, i + 10));
            }

            const embeds = pages.map((page, pageIndex) => {
                const embed = new EmbedBuilder()
                    .setTitle(`Casier de ${member.tag} - Page ${pageIndex + 1}/${pages.length}`)
                    .setColor('Orange')
                    .setTimestamp();

                page.forEach((row, index) => {
                    const date = new Date(row.timestamp).toLocaleString();
                    const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1);
                    const action = row.action || 'N/A';
                    const guildName = row.guildId
                        ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Unknown Server'
                        : 'Unknown Server';

                    embed.addFields({
                        name: `#${index + 1 + pageIndex * 10} - ${actionCapitalized}`,
                        value: `**Modérateur:** <@${row.modId}> (${row.modTag || 'N/A'})\n` +
                            `**Raison:** ${row.reason || 'N/A'}\n` +
                            `**Serveur:** ${guildName}\n` +
                            `**Date:** ${date}\n` +
                            `**Type:** ${action}`,
                        inline: false
                    });
                });

                return embed;
            });

            // Composants pour naviguer
            const row = new ActionRowBuilder().addComponents(
                new ButtonBuilder().setCustomId('prev').setLabel('⬅️').setStyle(ButtonStyle.Primary),
                new ButtonBuilder().setCustomId('next').setLabel('➡️').setStyle(ButtonStyle.Primary)
            );

            let currentPage = 0;
            const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: [row] });

            // Collecteur de boutons
            const collector = message.createMessageComponentCollector({ time: 60_000 });
            collector.on('collect', i => {
                if (i.user.id !== interaction.user.id) return i.reply({ content: 'Ce n’est pas ton menu !', embeds: [embed] });
                if (i.customId === 'next') currentPage = (currentPage + 1) % embeds.length;
                if (i.customId === 'prev') currentPage = (currentPage - 1 + embeds.length) % embeds.length;

                i.update({ embeds: [embeds[currentPage]] });
            });

        } catch (err) {
            console.error(err);
            await interaction.editReply('❌ Une erreur est survenue lors de la récupération du casier.');
        }
    },
};
