import { Observable } from 'rxjs';
import { SdGridMaterialColumn } from '../models/grid-column.model';
import { SdGeneratedColumn } from '../services/generated-column/generated-column.model';
export interface SdGridMaterialConfigOption<T = any> {
    key?: string;
    visible?: boolean;
    storage?: 'session' | 'server';
    customColumn?: boolean;
    args?: {
        [key: string]: any;
    };
    systemColumn?: {
        permission?: 'READ' | 'CREATE' | 'UPDATE' | 'DELETE';
        args?: {
            [key: string]: any;
        };
    };
}
export interface SdOriginColumn {
    field: string;
    title: string;
    width?: string;
    invisible?: boolean;
}
export interface SdGeneratedConfiguration {
    systemColumns: SdGeneratedColumn[];
    columns: SdGeneratedColumn[];
}
export interface SdColumnConfiguration {
    origin: SdOriginColumn;
    title?: string;
    width?: string;
    invisible?: boolean;
    fixed?: boolean;
    isGeneratedColumn?: boolean;
    generatedColumns?: string[];
    htmlTemplate?: string;
}
export interface SdGridConfiguration {
    columns?: SdColumnConfiguration[];
}
export interface SdGridConfigurationResult {
    column: {
        [field: string]: {
            title?: string;
            width?: string;
        };
    };
    fixedColumn: {
        [field: string]: {
            title?: string;
            width?: string;
        };
    };
    firstColumns: SdGridMaterialColumn[];
    secondColumns: SdGridMaterialColumn[];
    firstHeaders: string[];
    secondHeaders: string[];
    displayedColumns: string[];
    displayedFooters: string[];
    multipleHeader: boolean;
}
export interface SdGridConfigurationCache {
    load: () => Promise<void>;
    get: () => Promise<SdGridConfiguration>;
    set: (configuration: SdGridConfiguration) => SdGridConfiguration;
    remove: () => void;
    observer: Observable<SdGridConfiguration>;
}
