const os = require('os');
const fs = require('fs');


const cpuInfo = os.cpus()[0].model; // modèle du CPU
const cpuCores = os.cpus().length; // nombre de coeurs

const totalRAM = (os.totalmem() / (1024 ** 3)).toFixed(2); // en Go
const freeRAM = (os.freemem() / (1024 ** 3)).toFixed(2); // en Go

function getOS() {
    const platform = os.platform(); // ex: win32, linux
    const release = os.release(); // version du kernel / OS
    switch (platform) {
        case "win32":
            return `Windows ${release}`;
        case "darwin":
            return `macOS ${release}`;
        case "linux":
            try {
                const data = fs.readFileSync("/etc/os-release", "utf8");
                const match = data.match(/PRETTY_NAME="(.+)"/);
                if (match) return `${match[1]} (kernel ${release})`;
            } catch {
                return `Linux ${release}`;
            }
        default:
            return `${platform} ${release}`;
    }
}

const uptime = os.uptime(); // en secondes

function formatUptime(seconds) {
    const days = Math.floor(seconds / 86400);
    const hours = Math.floor((seconds % 86400) / 3600);
    const minutes = Math.floor((seconds % 3600) / 60);
    const secs = Math.floor(seconds % 60);

    return `${days}j ${hours}h ${minutes}m ${secs}s`;
}


const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');

module.exports = {
    category: 'dev',
    data: new SlashCommandBuilder()
        .setName('infra')
        .setDescription('Voir l’infrastructure du bot'),
    async execute(interaction) {
        const embed = new EmbedBuilder()
            .setTitle('Infrastructure du bot')
            .setColor('Blue')
            .addFields(
                { name: 'CPU', value: `${cpuInfo} (${cpuCores} coeurs)`, inline: true },
                { name: 'RAM', value: `${freeRAM} Go libres / ${totalRAM} Go totaux`, inline: true },
                { name: 'OS', value: getOS(), inline: true },
                { name: 'Uptime', value: formatUptime(uptime), inline: true }
            )
            .setTimestamp();

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