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

module.exports = {
    data: new SlashCommandBuilder()
        .setName('afficher-inactifs')
        .setDescription('Afficher les membres inactifs ou absents du serveur'),
    
    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 threeMonthsAgo = new Date();
            threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);

            const inactiveMembers = [];
            const notInServer = [];

            // Vérifier chaque lien
            for (const link of links) {
                // Vérifier si le membre est toujours sur le serveur
                const member = await interaction.guild.members.fetch(link.discord_id).catch(() => null);
                
                if (!member) {
                    // Membre n'est plus sur le serveur
                    notInServer.push(link);
                } else if (link.lastConnection) {
                    // Vérifier si inactif depuis plus de 3 mois
                    const lastConn = new Date(link.lastConnection);
                    if (lastConn < threeMonthsAgo) {
                        inactiveMembers.push(link);
                    }
                }
            }

            const embeds = [];

            // Embed pour les absents depuis + de 3 mois
            if (inactiveMembers.length > 0) {
                const embed = new EmbedBuilder()
                    .setColor(0xFF6B00)
                    .setTitle('⏰ Membres inactifs (+ de 3 mois)')
                    .setDescription(`Total: **${inactiveMembers.length}** membre(s) inactif(s)`)
                    .setTimestamp();

                for (const link of inactiveMembers) {
                    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}>`;

                    // Calculer le temps depuis la dernière connexion
                    let lastConnectionText = '';
                    if (link.lastConnection) {
                        const lastDate = new Date(link.lastConnection);
                        lastConnectionText = `<t:${Math.floor(lastDate.getTime() / 1000)}:R>`;
                    }

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

                embeds.push(embed);
            }

            // Embed pour les membres qui ne sont plus sur le serveur
            if (notInServer.length > 0) {
                const embed = new EmbedBuilder()
                    .setColor(0xFF0000)
                    .setTitle('👻 Membres liés mais absents du serveur Discord')
                    .setDescription(`Total: **${notInServer.length}** membre(s) absent(s)`)
                    .setTimestamp();

                for (const link of notInServer) {
                    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}>`;

                    // Calculer le temps depuis la dernière connexion
                    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}`,
                        value: `${discordMention} - Dernière connexion: ${lastConnectionText}`
                    });
                }

                embeds.push(embed);
            }

            // Si aucun inactif
            if (embeds.length === 0) {
                return interaction.editReply({
                    content: '✅ Aucun membre inactif ou absent du serveur !',
                    flags: MessageFlags.Ephemeral
                });
            }

            await interaction.editReply({ embeds });

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