/*!
 * @license
 * Copyright Squiz Australia Pty Ltd. All Rights Reserved.
 */
import { Observable } from 'rxjs';
import { CommandContext } from '../Context/Context.dto';
/**
 * TODO:
 * @export
 */
export declare type Command = Commandable & CommandExtras;
/**
 * TODO:
 * @export
 * @interface CommandExtras
 */
export interface CommandExtras {
    /**
     * TODO:
     * @type {string}
     * @memberof CommandExtras
     */
    commandFullName: string;
    /**
     * TODO:
     * @type {string}
     * @memberof CommandExtras
     */
    commandName: string;
    /**
     * TODO:
     * @type {boolean}
     * @memberof CommandExtras
     */
    isAlias: boolean;
    /**
     * TODO:
     * @type {string}
     * @memberof CommandExtras
     */
    pluginName: string;
    /**
     * TODO:
     * @type {string}
     * @memberof CommandExtras
     */
    pluginVersion: string;
}
/**
 * TODO:
 * @export
 */
export declare type CommandParent = (Command & {
    parent: CommandParent;
}) | null;
/**
 * TODO:
 * @export
 */
export declare type Commands = Record<string, Command | CommandsNested>;
/**
 * TODO:
 * @export
 */
export declare type CommandsNested = {
    [subcommandName: string]: Command | CommandsNested;
};
/**
 * TODO:
 * @export
 */
export declare type CommandsRaw = Record<string, CommandsRawNested | string>;
/**
 * TODO:
 * @export
 */
export declare type CommandsRawNested = {
    [subcommandName: string]: CommandsRawNested | string;
};
/**
 * TODO:
 * @export
 * @interface Commandable
 */
export interface Commandable {
    /**
     * TODO:
     * @param {CommandContext} context TODO:
     * @returns {Array<string>} TODO:
     * @memberof Commandable
     */
    aliases(context: CommandContext): Array<string>;
    /**
     * TODO:
     * @param {CommandContext} context TODO:
     * @returns {Array<string>} TODO:
     * @memberof Commandable
     */
    examples(context: CommandContext): Array<string>;
    /**
     * TODO:
     * @param {CommandContext} context TODO:
     * @returns {(Observable<unknown> | Promise<unknown> | unknown)} TODO:
     * @memberof Commandable
     */
    execute(context: CommandContext): Observable<unknown> | Promise<unknown> | unknown;
    /**
     * TODO:
     * @param {CommandContext} context TODO:
     * @returns {(Observable<string> | Promise<string> | string)} TODO:
     * @memberof Commandable
     */
    help(context: CommandContext): Observable<string> | Promise<string> | string;
    /**
     * TODO:
     * @param {CommandContext} context TODO:
     * @returns {Array<string>} TODO:
     * @memberof Commandable
     */
    usages(context: CommandContext): Array<string>;
}
