import type { IAPIMethods } from '@looker/sdk-rtl';
import type { ColumnHeaders, IRowModel, SheetValues } from './RowModel';
export declare const compareDates: (a: Date, b: Date) => number;
export interface IMaker<T> {
    new (values?: any): T;
}
export interface IRowDelta<T extends IRowModel> {
    updates: T[];
    deletes: T[];
    creates: T[];
}
export declare class TypedRows<T> {
    rows: T[];
    constructor(rows: T[], Maker?: IMaker<T>);
    add(value: T): void;
    where(predicate: (value: T) => boolean): TypedRows<T>;
    select<U>(selector: (value: T) => U): TypedRows<U>;
    toArray(): T[];
    static from<U>(values: U[]): TypedRows<U>;
    static create<U>(values?: U[]): TypedRows<U>;
}
export interface IWhollyArtifact<T extends IRowModel, P> {
    sdk: IAPIMethods;
    namespace: string;
    tableName: string;
    header: ColumnHeaders;
    displayHeader: ColumnHeaders;
    keyColumn: string;
    rows: T[];
    index: Record<string, T>;
    nextRow: number;
    checkHeader(header: ColumnHeaders): boolean;
    displayable(columnName: string): boolean;
    values(model: T): SheetValues;
    allValues(): SheetValues;
    typeRow<T extends IRowModel>(values?: any): T;
    typeRows<T extends IRowModel>(rows: SheetValues): T[];
    refresh<T extends IRowModel>(values?: any): Promise<T[]>;
    save<T extends IRowModel>(model: T, force?: boolean): Promise<T>;
    create<T extends IRowModel>(model: T): Promise<T>;
    update<T extends IRowModel>(model: T, force?: boolean): Promise<T>;
    delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>;
    checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>;
    find(value: any, columnName?: string): T | undefined;
    loadRows<T extends IRowModel>(rows: SheetValues): T[];
    toObject(): P[];
    fromObject<T extends IRowModel>(obj: P[]): T[];
    getDelta<T extends IRowModel>(): IRowDelta<T>;
    mergePurge<T extends IRowModel>(tab: SheetValues, delta: IRowDelta<T>): SheetValues;
    prepareBatch<T extends IRowModel>(tab: SheetValues, delta: IRowDelta<T>, force?: boolean): boolean;
    createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>;
    deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>;
    batchUpdate<T extends IRowModel>(force?: boolean): Promise<T[]>;
}
export interface ITabTable {
    header: ColumnHeaders;
    rows: IRowModel[];
}
export declare abstract class WhollyArtifact<T extends IRowModel, P> extends TypedRows<T> implements IWhollyArtifact<T, P> {
    readonly sdk: IAPIMethods;
    readonly table: ITabTable;
    readonly keyColumn: string;
    index: Record<string, T>;
    namespace: string;
    tableName: string;
    constructor(sdk: IAPIMethods, table: ITabTable, keyColumn?: string);
    loadRows<T extends IRowModel>(rows: SheetValues): T[];
    refresh<T extends IRowModel>(values?: any): Promise<T[]>;
    abstract typeRow<T extends IRowModel>(values?: any): T;
    typeRows<T extends IRowModel>(rows: SheetValues): T[];
    private static toAT;
    checkHeader(): boolean;
    get header(): ColumnHeaders;
    get nextRow(): number;
    private createIndex;
    values<T extends IRowModel>(model: T): SheetValues;
    allValues(): SheetValues;
    save<T extends IRowModel>(model: T, force?: boolean): Promise<T>;
    checkId<T extends IRowModel>(model: T): void;
    create<T extends IRowModel>(model: T): Promise<T>;
    update<T extends IRowModel>(model: T, _force?: boolean): Promise<T>;
    find(value: any, columnName?: string): T | undefined;
    private _displayHeader;
    get displayHeader(): ColumnHeaders;
    delete<T extends IRowModel>(model: T, force?: boolean): Promise<boolean>;
    displayable(columnName: string): boolean;
    checkOutdated<T extends IRowModel>(model: T, source?: T): Promise<boolean>;
    fromObject<T extends IRowModel>(obj: P[]): T[];
    toObject(): P[];
    batchUpdate<T extends IRowModel>(_force?: boolean): Promise<T[]>;
    getDelta<T extends IRowModel>(): IRowDelta<T>;
    mergePurge<T extends IRowModel>(values: SheetValues, delta: IRowDelta<T>): SheetValues;
    prepareBatch<T extends IRowModel>(values: SheetValues, delta: IRowDelta<T>, force?: boolean): boolean;
    createUpdateBatch<T extends IRowModel>(items: T[]): Promise<T[]>;
    private updateRowsFromIndex;
    deleteBatch<T extends IRowModel>(items: T[]): Promise<T[]>;
}
