import type { Response } from 'express';
import { FormInstanceService } from '../services';
import { FormApprovalIntegrationService } from '../services/form-approval-integration.service';
import { CreateFormInstanceDto, UpdateFormInstanceDto, SubmitFormInstanceDto, QueryMyFormInstancesDto, QueryAllFormInstancesDto, BatchUpdateStatusDto, ExportFormInstancesDto, GetFormInstanceStatsDto, CancelFormInstanceDto } from '../dto';
export declare class FormInstancesController {
    private readonly formInstanceService;
    private readonly approvalIntegration;
    constructor(formInstanceService: FormInstanceService, approvalIntegration: FormApprovalIntegrationService);
    findAll(query: QueryAllFormInstancesDto): Promise<{
        items: any[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    exportInstances(dto: ExportFormInstancesDto, res: Response): Promise<void>;
    getStats(dto: GetFormInstanceStatsDto): Promise<{
        formKey: string;
        totalInstances: number;
        statusBreakdown: {
            DRAFT: number;
            SUBMITTED: number;
            APPROVED: number;
            REJECTED: number;
            CANCELLED: number;
        };
        submissionTrend: {
            bucket: string;
            count: number;
        }[];
        topUsers: {
            userId: string;
            count: number;
        }[];
    }>;
    create(dto: CreateFormInstanceDto, userId: string): Promise<any>;
    findMy(query: QueryMyFormInstancesDto, userId: string): Promise<{
        items: any[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(instanceIdentifier: string, userId: string): Promise<any>;
    update(instanceIdentifier: string, dto: UpdateFormInstanceDto, userId: string): Promise<any>;
    submit(instanceIdentifier: string, dto: SubmitFormInstanceDto, userId: string): Promise<any>;
    remove(instanceIdentifier: string, userId: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    cancel(instanceIdentifier: string, dto: CancelFormInstanceDto, userId: string): Promise<any>;
    restore(instanceIdentifier: string, userId: string): Promise<{
        id: string;
        businessKey: string;
        deletedAt: null;
        restored: boolean;
    }>;
    batchUpdateStatus(dto: BatchUpdateStatusDto): Promise<{
        updated: number;
        failed: number;
    }>;
    batchDelete(ids: string[], userId: string): Promise<{
        deleted: number;
        failed: number;
        errors: Array<{
            id: string;
            error: string;
        }>;
    }>;
    getApprovalStatus(instanceIdentifier: string): Promise<{
        formInstance: {
            id: string;
            formKey: string;
            formName: string;
            status: import("@prisma/client").$Enums.FormInstanceStatus;
            submittedBy: {
                displayName: string;
                id: string;
            } | null;
            submittedAt: Date | null;
        };
        approval: null;
        currentTasks: never[];
        history: never[];
    } | {
        formInstance: {
            id: string;
            formKey: string;
            formName: string;
            status: import("@prisma/client").$Enums.FormInstanceStatus;
            submittedBy: {
                displayName: string;
                id: string;
            } | null;
            submittedAt: Date | null;
        };
        approval: {
            id: string;
            status: import("@prisma/client").$Enums.InstanceStatus;
            currentNode: string | null;
            startTime: Date;
            endTime: Date | null;
        };
        currentTasks: {
            id: string;
            name: string;
            assignee: string | null;
            status: import("@prisma/client").$Enums.ApprovalTaskStatus;
            createTime: Date;
        }[];
        history: {
            id: string;
            taskName: string;
            action: import("@prisma/client").$Enums.ApprovalTaskAction;
            actorId: string;
            comment: string | null;
            timestamp: Date;
        }[];
    }>;
    withdrawForm(instanceIdentifier: string, userId: string): Promise<{
        instanceId: string;
        status: import("@prisma/client").$Enums.FormInstanceStatus;
        withdrawn: boolean;
    }>;
}
