import {
  ChannelType,
  PermissionFlagsBits,
  SlashCommandBuilder
} from 'discord.js';

export const commandDefinitions = [
  new SlashCommandBuilder()
    .setName('vxbot')
    .setDescription('Informations et état de VX BOT')
    .addSubcommand(sub => sub.setName('status').setDescription('Affiche l’état du bot')),

  new SlashCommandBuilder()
    .setName('embed')
    .setDescription('Publie rapidement un message embed')
    .setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
    .addChannelOption(option => option
      .setName('salon')
      .setDescription('Salon de publication')
      .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)
      .setRequired(true))
    .addStringOption(option => option.setName('titre').setDescription('Titre').setRequired(true).setMaxLength(256))
    .addStringOption(option => option.setName('description').setDescription('Contenu').setRequired(true).setMaxLength(4000))
    .addStringOption(option => option.setName('couleur').setDescription('Couleur hexadécimale, ex. #7c5cff')),

  new SlashCommandBuilder()
    .setName('setup')
    .setDescription('Configure les fonctions principales')
    .setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
    .addSubcommand(sub => sub
      .setName('welcome')
      .setDescription('Configure l’accueil et l’autorôle')
      .addChannelOption(option => option
        .setName('salon')
        .setDescription('Salon d’accueil')
        .addChannelTypes(ChannelType.GuildText)
        .setRequired(true))
      .addRoleOption(option => option.setName('role').setDescription('Rôle attribué automatiquement'))
      .addStringOption(option => option.setName('message').setDescription('Variables : {user}, {server}, {count}').setMaxLength(1000))),

  new SlashCommandBuilder()
    .setName('clear')
    .setDescription('Supprime plusieurs messages du salon')
    .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages)
    .addIntegerOption(option => option
      .setName('nombre')
      .setDescription('Nombre de messages à supprimer')
      .setMinValue(1)
      .setMaxValue(100)
      .setRequired(true)),

  new SlashCommandBuilder()
    .setName('kick')
    .setDescription('Expulse un membre du serveur')
    .setDefaultMemberPermissions(PermissionFlagsBits.KickMembers)
    .addUserOption(option => option.setName('membre').setDescription('Membre à expulser').setRequired(true))
    .addStringOption(option => option.setName('raison').setDescription('Motif de l’expulsion').setMaxLength(500)),

  new SlashCommandBuilder()
    .setName('ban')
    .setDescription('Bannit un membre du serveur')
    .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
    .addUserOption(option => option.setName('membre').setDescription('Membre à bannir').setRequired(true))
    .addStringOption(option => option.setName('raison').setDescription('Motif du bannissement').setMaxLength(500))
].map(command => command.toJSON());
