import type Discord from "discord.js";
import client from "./client.js";

/**
 * @param name The name of the command, not including a leading slash. This can be space or slash separated e.g. "mod/about" or "mod about"
 * @returns A string which when put into Discord will mention the command if the command exists or a codeblock with the command name if it does not
 *
 * @throws Will throw an error if as empty string is passed
 **/
export const getCommandMentionByName = (name: string): string => {
    const split = name.replaceAll("/", " ").split(" ");
    const commandName: string | undefined = split[0];
    if (commandName === undefined) throw new RangeError(`Invalid command ${name} provided to getCommandByName`);

    const filterCommand = (command: Discord.ApplicationCommand) => command.name === commandName;

    const command = client.fetchedCommands.filter((c) => filterCommand(c));
    const commandID = command.first()?.id;

    if (commandID === undefined) return `\`/${name.replaceAll("/", " ")}\``;

    return `</${split.join(" ")}:${commandID}>`;
};

/**
 * @param name The name of the command, not including a leading slash. This can be space or slash separated e.g. "mod/about" or "mod about"
 * @returns An object containing the command name, the command description and a string which when put into Discord will mention the command
 *
 * @throws Will throw an error if the command doesn't exist
 * @throws Will throw an error if as empty string is passed
 **/
export const getCommandByName = (name: string): { name: string; description: string; mention: string } => {
    const split = name.replaceAll(" ", "/");
    const command = client.commands["commands/" + split];

    if (command === undefined) throw new RangeError(`Invalid command ${name} provided to getCommandByName`);

    const mention = getCommandMentionByName(name);
    return {
        name: command[1].name,
        description: command[1].description,
        mention: mention
    };
};
