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

module.exports = {
    data: new SlashCommandBuilder()
        .setName('afficher-lies')
        .setDescription('Afficher tous les comptes liés'),
    
    async execute(interaction) {
        try {
            await interaction.deferReply({});

            const links = await getAllLinks();

            if (links.length === 0) {
                return interaction.editReply({
                    content: '📝 Aucun compte lié pour le moment.',
                    flags: MessageFlags.Ephemeral
                });
            }

            const embeds = [];
            const FIELDS_PER_EMBED = 24; // Maximum 25 fields par embed, on garde une marge

            // Diviser les liens en chunks de 24 pour respecter la limite Discord
            for (let i = 0; i < links.length; i += FIELDS_PER_EMBED) {
                const chunk = links.slice(i, i + FIELDS_PER_EMBED);
                
                const embed = new EmbedBuilder()
                    .setColor(0x0099FF)
                    .setTitle(i === 0 ? '🔗 Liste des comptes liés' : null)
                    .setDescription(i === 0 ? `Total: **${links.length}** compte(s) lié(s)` : null)
                    // si c'est le dernier embed, on met la date actuelle
                    .setTimestamp(i + FIELDS_PER_EMBED >= links.length ? new Date() : null);

                for (const link of chunk) {
                    const user = await interaction.client.users.fetch(link.discord_id).catch(() => null);
                    const discordName = user ? (user.globalName ? user.globalName : user.username) : link.discord_username;
                    const discordMention = `<@${link.discord_id}>`;

                    // temps depuis la dernière connexion formatée pour affichage discord
                    let lastConnectionText = 'Jamais connecté';
                    if (link.lastConnection) {
                        const lastDate = new Date(link.lastConnection);
                        lastConnectionText = `<t:${Math.floor(lastDate.getTime() / 1000)}:R>`;
                    }

                    embed.addFields({
                        name: `👤 ${discordName} - 🎮 ${link.palworld_username} - ${lastConnectionText}`,
                        value: `${discordMention}`
                    });
                }

                embeds.push(embed);
            }

            await interaction.editReply({ embeds });

        } catch (error) {
            console.error('Erreur lors de la récupération des liaisons:', error);
            await interaction.editReply({
                content: '❌ Une erreur est survenue lors de la récupération des liaisons.',
                flags: MessageFlags.Ephemeral
            });
        }
    },
};
