import {SubcommandData} from "../types"
import {
    ActivityType,
    ApplicationCommandOptionType,
    ApplicationCommandSubCommandData,
    ChatInputCommandInteraction,
} from "discord.js"
import {wrappedRestart} from "../../ipc/restart"
import {UsersTable} from "../../database/users.js"

export class BotRestartCommand extends SubcommandData {
    private readonly _users: UsersTable
    private readonly _cleanUp: () => Promise<void>

    constructor({users, cleanUp}: { users: UsersTable, cleanUp(): Promise<void> }) {
        super()
        this._users = users
        this._cleanUp = cleanUp
    }

    readonly definition: ApplicationCommandSubCommandData = {
        name: "restart",
        type: ApplicationCommandOptionType.Subcommand,
        description: "Tells the bot to restart.",
    }

    async execute(b: ChatInputCommandInteraction): Promise<void> {
        if (await this._users.getActiveSnowflakeIsAdmin(b.user.id)) {
            await b.reply({
                ephemeral: true,
                content: "Yaaaawwn... Okay... Just a quick nap then...",
            })
            const self = b.client.user
            self.setPresence({
                status: "idle",
                afk: true,
                activities: [
                    {
                        type: ActivityType.Listening,
                        name: "A New Day",
                    },
                ],
            })
            await wrappedRestart(b, this._cleanUp)
        } else {
            await b.reply({
                ephemeral: true,
                content: "Heeey... I don't gotta do what you say...",
            })
        }
    }
}