const { REST, Routes } = require('discord.js');
const fs = require('node:fs');
const dotenv = require('dotenv');

dotenv.config();

const registerCommands = (log) => {
  const commands = [];
  // Grab all the command files from the commands directory you created earlier
  const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

  // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
  for (const file of commandFiles) {
    const command = require(`../commands/${file}`);
    commands.push(command.data.toJSON());
  }

  // Construct and prepare an instance of the REST module
  const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);

  // and deploy your commands!
  (async () => {
    try {
      log.Info(`Started refreshing ${commands.length} application (/) commands.`);

      // The put method is used to fully refresh all commands in the guild with the current set
      let data = null;
      if (process.env.GUILD_ID !== 'production') {
        data = await rest.put(
          Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
          { body: commands },
        );
      } else {
        data = await rest.put(
          Routes.applicationGuildCommands(process.env.CLIENT_ID),
          { body: commands },
        );
      }

      log.Info(`Successfully reloaded ${data.length} application (/) commands.`);
    } catch (error) {
      // And of course, make sure you catch and log any errors!
      log.Error(error);
    }
  })();
};

module.exports = { registerCommands };
