import type { ApplicationCommandOptionType, ChannelType } from "#enums";
import type { Localizations as _Localizations } from "./localizations.js";
import type { ApplicationCommand } from "./application-command.js";
declare namespace LocalizedApplicationCommandOption {
    interface Structure extends ApplicationCommand.OptionStructureWithoutNarrowing, _Localizations.Localized {
        choices?: Array<ChoiceStructure>;
        options?: Array<Structure>;
    }
    interface ChoiceStructure extends ApplicationCommand.Option.ChoiceStructure, _Localizations.Localized {
    }
}
declare namespace LocalizationsApplicationCommandOption {
    interface Structure extends ApplicationCommand.OptionStructureWithoutNarrowing, _Localizations.Base {
        choices?: Array<ChoiceStructure>;
        options?: Array<Structure>;
    }
    interface ChoiceStructure extends ApplicationCommand.Option.ChoiceStructure, _Localizations.Base {
    }
}
export declare namespace ApplicationCommandOption {
    export import Localizations = LocalizationsApplicationCommandOption;
    export import Localized = LocalizedApplicationCommandOption;
    type Structure = ChannelStructure | StringStructure | NumericStructure | SubCommandStructure | Base;
    interface Base extends _Localizations.Base {
        type: ApplicationCommandOptionType;
        name: string;
        description: string;
        required?: boolean;
    }
    type WithChoices<T> = T & {
        choices?: Array<ChoiceStructure>;
    };
    type WithAutocomplete<T> = T & {
        autocomplete?: boolean;
    };
    interface ChoiceStructure {
        name: string;
        value: string | number;
    }
    interface SubCommandStructure extends Base {
        type: ApplicationCommandOptionType.SUB_COMMAND | ApplicationCommandOptionType.SUB_COMMAND_GROUP;
        options?: Array<Structure>;
    }
    type NumericStructure = WithChoices<BaseNumericStructure> | WithAutocomplete<BaseNumericStructure>;
    interface BaseNumericStructure extends Base {
        type: ApplicationCommandOptionType.NUMBER | ApplicationCommandOptionType.INTEGER;
        min_value?: number;
        max_value?: number;
    }
    type StringStructure = WithChoices<BaseStringStructure> | WithAutocomplete<BaseStringStructure>;
    interface BaseStringStructure extends Base {
        type: ApplicationCommandOptionType.STRING;
        min_length?: number;
        max_length?: number;
    }
    interface ChannelStructure extends Base {
        type: ApplicationCommandOptionType.CHANNEL;
        channel_types?: Array<ChannelType>;
    }
}
export {};
//# sourceMappingURL=application-command-options.d.ts.map