// @ts-check

export type TurboSyncConfigArray = TurboSyncConfigObject[];

export interface TurboSyncConfigObject {
    title?: string;
    files?: string[] | TurboSyncFileObject[];
    folders?: string[] | TurboSyncFileObject[];
    options?: TurboSyncOptions;
}

export interface TurboSyncFileObject {
    path: string;
    host?: string;
    user?: string;
    ssh_key?: string;
    interval?: number;
}

export interface TurboSyncOptions {
    delete?: boolean;
    exclude?: string[];
    interval?: number;
}

export interface SyncFilesFnParams {
    files: string[] | TurboSyncFileObject[];
    options: TurboSyncOptions | undefined;
}

export interface SyncFilesSyncFnParams {
    files: string[] | TurboSyncFileObject[];
    options: TurboSyncOptions | undefined;
    filePath: string;
}

export interface SyncFoldersFnParams {
    folders: string[] | TurboSyncFileObject[];
    options: TurboSyncOptions | undefined;
}

export interface SyncFoldersSyncFnParams {
    dirs: string[] | TurboSyncFileObject[];
    options: TurboSyncOptions | undefined;
    dirPath: string;
    init?: boolean;
}

export interface HandleEnvVarsFnParams {
    json: string;
}
