import * as exceljs from 'exceljs';
import { SheetSection, AttributeType, SheetExcelOption } from './common-type.js';
import { ExcelTemplateManager } from '../core/Template.js';
import { CellImportOptions } from './import-template.type.js';

type CellDataHelper = {
    rowIndex: number;
    isVariable: boolean;
    label?: string;
    variableValue?: {
        fieldName: string;
        type: AttributeType;
    };
    detail: exceljs.Cell;
    address: string;
    section: SheetSection;
    beginTableAt: number;
    endTableAt: number;
    formula?: exceljs.Cell["formula"];
};
type RowDataHelper = {
    rowIndex: number;
    detail: exceljs.Row;
    section: SheetSection;
    cells: CellDataHelper[];
    beginTableAt?: number;
    endTableAt?: number;
};
type SheetDataHelper = {
    sheetIndex: number;
    columnIndex: number;
    name: string;
    detail: exceljs.Worksheet;
    beginTableAt: number;
    endTableAt: number;
    rowCount: number;
    lastestRow: RowDataHelper;
    firstRow: RowDataHelper;
};
type ExcelReaderHelperOptions = {
    onSheet?: (sheet: SheetDataHelper) => Promise<any>;
    onRow?: (row: RowDataHelper) => Promise<any>;
    onCell?: (cell: CellDataHelper) => Promise<any>;
    isSampleExcel?: boolean;
    template?: SheetExcelOption<any>[];
    templateManager: ExcelTemplateManager<CellImportOptions>;
};

export type { CellDataHelper, ExcelReaderHelperOptions, RowDataHelper, SheetDataHelper };
