import { PrismaService } from "../../../../core/database/prisma/prisma.service";
import { FormInstance, FormDefinition } from '@prisma/client';
import { ApprovalCompletedCallbackDto } from '../dto/form-approval-callback.dto';
import { ApprovalService } from "../../../approval/approval.service";
export declare class FormApprovalIntegrationService {
    private prisma;
    private approvalService;
    private readonly logger;
    constructor(prisma: PrismaService, approvalService: ApprovalService);
    submitWithApproval(instance: FormInstance, form: FormDefinition, userId: string, comment?: string): Promise<{
        needsApproval: boolean;
        approvalInstance: null;
    } | {
        needsApproval: boolean;
        approvalInstance: {
            id: string;
            workflowId: string;
            status: import("../../../approval/dto/approval-response.dto").InstanceStatus;
        };
    }>;
    handleApprovalCompleted(dto: ApprovalCompletedCallbackDto): Promise<{
        formVersion: number;
        data: import("@prisma/client/runtime/library").JsonValue;
        id: string;
        createdAt: Date;
        businessKey: string;
        status: import("@prisma/client").$Enums.FormInstanceStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        regionId: string | null;
        updatedBy: string | null;
        createdBy: string;
        formKey: string;
        formDefinitionId: string;
        formVersionId: string;
        snapshotId: string | null;
        submittedBy: string | null;
        submittedAt: Date | null;
        approvalInstanceId: string | null;
        approvalStatus: string | null;
        approvalStartTime: Date | null;
        approvalEndTime: Date | null;
    }>;
    getApprovalStatus(instanceId: 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;
        }[];
    }>;
    withdrawFormWithApproval(instanceId: string, userId: string): Promise<{
        formVersion: number;
        data: import("@prisma/client/runtime/library").JsonValue;
        id: string;
        createdAt: Date;
        businessKey: string;
        status: import("@prisma/client").$Enums.FormInstanceStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        regionId: string | null;
        updatedBy: string | null;
        createdBy: string;
        formKey: string;
        formDefinitionId: string;
        formVersionId: string;
        snapshotId: string | null;
        submittedBy: string | null;
        submittedAt: Date | null;
        approvalInstanceId: string | null;
        approvalStatus: string | null;
        approvalStartTime: Date | null;
        approvalEndTime: Date | null;
    }>;
}
