const { PermissionFlagsBits, ApplicationCommandOptionType } = require('discord.js')

const modLog = require('../modLog')

module.exports = {
  data: {
    name: 'kick',
    description: 'Kick a member from the server.',
    default_member_permissions: PermissionFlagsBits.KickMembers.toString(),
    options: [
      { name: 'user', description: 'Member to kick', type: ApplicationCommandOptionType.User, required: true },
      { name: 'reason', description: 'Reason for the kick', type: ApplicationCommandOptionType.String, required: true },
    ],
  },
  async execute(interaction) {
    const user = interaction.options.getUser('user', true)
    const reason = interaction.options.getString('reason', true)

    if (user.id === interaction.user.id) {
      await interaction.reply({ content: "You can't kick yourself.", ephemeral: true })
      return
    }

    const member = interaction.guild.members.cache.get(user.id)
    if (!member) {
      await interaction.reply({ content: 'That user is not a member of this server.', ephemeral: true })
      return
    }
    if (!member.kickable) {
      await interaction.reply({ content: "I don't have permission to kick that member (role hierarchy).", ephemeral: true })
      return
    }

    await member.kick(reason)
    await modLog.record({ client: interaction.client, guildId: interaction.guildId, actionType: 'kick', target: user, staffUser: interaction.user, reason })
    await interaction.reply({ content: `Kicked ${user.tag}.`, ephemeral: true })
  },
}
