import { Command, Usage } from 'clipanion';

declare abstract class BaseCommand extends Command {
    /**
     * glob
     */
    files: string;
    ignoreCase: boolean;
    globCwd: string | undefined;
    yes: boolean;
    showTokens: boolean;
    abstract execute(): Promise<number | void>;
}

interface FilenameTokens {
    fullpath: string;
    dir: string;
    file: string;
    name: string;
    ext: string;
    pdir: string;
    rname: string;
}
declare function getFilenameTokens(item: string): FilenameTokens;
declare function renderFilenameTokens(template: string, options: FilenameTokens): string;
declare function printFilenameTokens(tokens: FilenameTokens): void;

declare class TxtCommand extends Command {
    static paths?: string[][];
    static usage: Usage;
    txt: string;
    command: string;
    argsSplit: string;
    yes: boolean;
    wait: boolean;
    waitTimeout: string | undefined;
    session: string;
    execute(): Promise<number | void>;
}
declare enum SessionControl {
    Start = "start",
    ReStart = "restart",
    Continue = "continue"
}
type TxtCommandArgs = Pick<TxtCommand, 'txt' | 'command' | 'yes' | 'wait' | 'waitTimeout'> & {
    session: SessionControl;
    argsSplit: string | RegExp;
};
declare const defaultTxtCommandArgs: {
    session: SessionControl.Continue;
    argsSplit: RegExp;
};
declare function startTxtCommand(args: TxtCommandArgs): Promise<void>;

export { BaseCommand, type FilenameTokens, SessionControl, TxtCommand, type TxtCommandArgs, defaultTxtCommandArgs, getFilenameTokens, printFilenameTokens, renderFilenameTokens, startTxtCommand };
