import {ApplicationCommandOptionType, ApplicationCommandSubCommandData, ApplicationCommandType} from "discord.js"
import {commandCharacterCreate} from "./create.js"
import {BaseChatInputCommandData, CommandWithSubcommandsData} from "../types.js"

class CharacterCommandData extends CommandWithSubcommandsData {
    readonly baseDefinition: BaseChatInputCommandData = {
        name: "character",
        type: ApplicationCommandType.ChatInput,
        description: "Commands to manage your characters.",
    }

    readonly subcommands = [
        commandCharacterCreate,
    ]
}

export const commandCharacter = new CharacterCommandData()

const otherSubcommands: ApplicationCommandSubCommandData[] = [
    {
        name: "select",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Selects (and activates, if necessary) a character for use with other commands used in this server.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "The character to switch to. If not supplied, shows you the current selected character.",
                autocomplete: true,
                required: false,
            },
        ],
    },
    {
        name: "activate",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Allows a character to be targeted on the current server.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "The character to activate on this server.",
                autocomplete: true,
                required: false,
            },
        ],
    },
    {
        name: "deactivate",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Prevents a character from being targeted on the current server. Deselects them if they're selected.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "The character to deactivate on this server.",
            },
        ],
    },
    {
        name: "edit",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Edits an existing character. Note that characters currently in battle cannot be edited.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "An existing character of yours to edit. Omit to edit the current character.",
                autocomplete: true,
                required: false,
            },
        ],
    },
    {
        name: "list",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Lists your characters.",
        options: [
            {
                name: "public",
                type: ApplicationCommandOptionType.Boolean,
                description: "True to share your character list with the current channel.",
                required: false,
            },
        ],
    },
    {
        name: "show",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Shows the data about one of your characters.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "An existing character of yours to display in this channel. Omit to display the current character.",
                autocomplete: true,
                required: false,
            },
            {
                name: "public",
                type: ApplicationCommandOptionType.Boolean,
                description: "True to share your character list with the current channel.",
                required: false,
            },
        ],
    },
    {
        name: "archive",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Removes a character from all servers and hides it from the default list view.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "An existing unarchived character of yours to add to the archive.",
                autocomplete: true,
                required: false,
            },
        ],
    },
    {
        name: "unarchive",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Unarchives a character.",
        options: [
            {
                name: "character",
                type: ApplicationCommandOptionType.String,
                description: "An existing archived character of yours to take back out of the archive.",
                autocomplete: true,
                required: false,
            },
        ],
    },
]