import type { Prisma, ImportBatchType } from '@prisma/client';
export interface FieldMetadata {
    field: string;
    label: {
        zh: string;
        en: string;
    };
    type: 'string' | 'number' | 'date' | 'enum' | 'uuid' | 'fk';
    required: boolean;
    enumValues?: string[];
    fkRef?: {
        table: string;
        column: string;
    };
    description?: {
        zh: string;
        en: string;
    };
    example?: string;
}
export interface ValidationIssue {
    rowNo: number;
    field: string;
    code: string;
    params: Record<string, string>;
    severity: 'ERROR' | 'WARNING';
}
export interface ExecuteResult {
    rowResults: {
        rowNo: number;
        entityIds: string[];
    }[];
    sideEffects?: {
        recordCount?: number;
        notes?: string;
    };
}
export interface ParsedRow<TInput = Record<string, unknown>> {
    rowNo: number;
    raw: Record<string, unknown>;
    typed: TInput | null;
    parseIssues: ValidationIssue[];
}
export interface Importer<TInput> {
    readonly type: ImportBatchType;
    readonly fieldMetadata: FieldMetadata[];
    parseRow(rawRow: Record<string, unknown>, rowNo: number): ParsedRow<TInput>;
    validateReferences(rows: ParsedRow<TInput>[]): Promise<ValidationIssue[]>;
    validateBusinessRules(rows: ParsedRow<TInput>[]): Promise<ValidationIssue[]>;
    execute(rows: TInput[], tx: Prisma.TransactionClient, userId: string, organizationId: string): Promise<ExecuteResult>;
}
