import { IReporter } from '@guanghechen/reporter';

declare const DEFAULT_LINE_END: string;

interface IFakeClipboardProps {
    filepath: string;
    encoding?: BufferEncoding;
    reporter?: IReporter;
}
interface IFakeClipboardReadOptions {
}
interface IFakeClipboardWriteOptions {
}
declare class FakeClipboard {
    readonly filepath: string;
    readonly encoding: BufferEncoding;
    readonly reporter: IReporter | null;
    private isInitialized;
    constructor(props: IFakeClipboardProps);
    read(_options?: IFakeClipboardReadOptions): Promise<string>;
    write(content: string, _options?: IFakeClipboardWriteOptions): Promise<void>;
    protected init(): Promise<void>;
}

interface ICopyOptions {
    /**
     * System `copy` command location.
     */
    copyCommandPath?: string;
    /**
     * Arguments passed to the `copy` command.
     */
    copyCommandArgs?: string[];
    /**
     * Fake clipboard.
     */
    fakeClipboard?: FakeClipboard;
    /**
     * Logger.
     */
    reporter?: IReporter;
}
/**
 * Copy content to system clipboard.
 * @param content           the content you want to write into system clipboard.
 * @param options
 */
declare function copy(content: string, options?: ICopyOptions): Promise<void | never>;

interface IPasteOptions {
    /**
     * System `paste` command location.
     */
    pasteCommandPath?: string;
    /**
     * Arguments passed to the `paste` command.
     */
    pasteCommandArgs?: string[];
    /**
     * Fake clipboard.
     */
    fakeClipboard?: FakeClipboard;
    /**
     * Logger.
     */
    reporter?: IReporter;
    /**
     * System line-ending symbol.
     */
    lineEnd?: string;
}
/**
 * get the data from system clipboard
 * @param options
 */
declare function paste(options?: IPasteOptions): Promise<string | never>;

export { DEFAULT_LINE_END, FakeClipboard, copy, paste };
export type { ICopyOptions, IFakeClipboardProps, IFakeClipboardReadOptions, IFakeClipboardWriteOptions, IPasteOptions };
