import { Style, Location } from 'exceljs';
import { SheetSection, AttributeType } from './common-type.cjs';

type TableData<T> = {
    header?: T;
    footer?: T;
    table: T[];
};
type LayoutSheet<T extends BaseCellAttribute> = {
    cells: {
        header?: T[];
        footer?: T[];
        table: T[];
    };
    beginTableAt: number;
    endTableAt: number;
    columnIndex: number;
};
type BaseCellAttribute = {
    section: SheetSection;
    row: number;
    col: number;
    address?: string;
    key: string;
};
type ImportCell = {
    type: AttributeType;
    required?: boolean;
    setValue?: (attributeValue?: any, row?: Record<string, any>) => any;
    validate?: (val: any) => {
        isValid: boolean;
        message?: string;
    } | Error;
} & BaseCellAttribute;
declare enum ExportCellTypeEnum {
    VARIABLE = "VARIABLE",
    FORMULA = "FORMULA",
    LABEL = "LABEL"
}
type ExportCell = {
    value: any;
    type: ExportCellTypeEnum;
    style?: Partial<Style>;
    formatValue?: (value: any) => any;
} & BaseCellAttribute;
type LayoutExportSheet = {
    merges?: Record<string, {
        model: Location;
    }>;
    columnWidths?: (number | undefined)[];
    rowHeights?: Record<string, number>;
} & LayoutSheet<ExportCell>;
type TableDataByLayout<T> = {};

export { type BaseCellAttribute, type ExportCell, ExportCellTypeEnum, type ImportCell, type LayoutExportSheet, type LayoutSheet, type TableData, type TableDataByLayout };
