import { PrismaService } from "../../../../core/database/prisma/prisma.service";
import { Prisma } from '@prisma/client';
import { CreateFormVersionDto, UpdateFormVersionDto, PublishFormVersionDto, SetDefaultVersionDto } from '../dto';
import { SubmitForReviewDto, ReviewVersionDto, QueryPendingReviewDto, QueryMySubmissionsDto } from '../dto/form-version-review.dto';
import { FormIdentifierResolverService } from './form-identifier-resolver.service';
export declare class FormVersionService {
    private readonly prisma;
    private readonly identifierResolver;
    private readonly logger;
    constructor(prisma: PrismaService, identifierResolver: FormIdentifierResolverService);
    create(formIdentifier: string, dto: CreateFormVersionDto, createdBy: string): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    findAll(formIdentifier: string): Promise<{
        instanceCount: number;
        translationCount: number;
        _count: undefined;
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }[]>;
    findOne(formIdentifier: string, version: number): Promise<{
        instanceCount: number;
        _count: undefined;
        translations: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            locale: string;
            versionId: string;
            translations: Prisma.JsonValue;
        }[];
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    update(formIdentifier: string, version: number, dto: UpdateFormVersionDto): Promise<{
        instanceCount: number;
        _count: undefined;
        translations: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            locale: string;
            versionId: string;
            translations: Prisma.JsonValue;
        }[];
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    publish(formIdentifier: string, version: number, dto?: PublishFormVersionDto): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    deprecate(formIdentifier: string, version: number): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    setDefault(formIdentifier: string, dto: SetDefaultVersionDto): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewComment: string | null;
        validation: Prisma.JsonValue | null;
        createdBy: string;
        version: number;
        isDefault: boolean;
        definitionId: string;
        nameI18n: Prisma.JsonValue;
        descriptionI18n: Prisma.JsonValue | null;
        schema: Prisma.JsonValue;
        uiSchema: Prisma.JsonValue | null;
        viewSchema: Prisma.JsonValue | null;
        changelog: string | null;
        reviewedBy: string | null;
        reviewedAt: Date | null;
        publishedAt: Date | null;
    }>;
    remove(formIdentifier: string, version: number): Promise<{
        id: string;
        version: number;
        deleted: boolean;
    }>;
    submitForReview(formIdentifier: string, version: number, dto: SubmitForReviewDto, userId: string): Promise<{
        id: string;
        version: number;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        submittedAt: string;
    }>;
    reviewVersion(formIdentifier: string, version: number, dto: ReviewVersionDto, reviewerId: string): Promise<{
        id: string;
        version: number;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        isDefault: boolean;
        reviewedBy: string;
        reviewedAt: string;
        reviewComment: string | undefined;
    } | {
        id: string;
        version: number;
        status: import("@prisma/client").$Enums.FormVersionStatus;
        reviewedBy: string;
        reviewedAt: string;
        reviewComment: string | undefined;
        isDefault?: undefined;
    }>;
    findPendingReview(query: QueryPendingReviewDto): Promise<{
        items: {
            id: string;
            version: number;
            status: import("@prisma/client").$Enums.FormVersionStatus;
            changelog: string | null;
            createdAt: Date;
            submittedBy: {
                id: string;
                name: string;
            } | null;
            form: {
                id: string;
                key: string;
                slug: string;
                name: string;
                category: string;
            } | null;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    previewForReview(versionId: string): Promise<{
        version: {
            id: string;
            version: number;
            schema: Prisma.JsonValue;
            uiSchema: Prisma.JsonValue;
            viewSchema: Prisma.JsonValue;
            changelog: string | null;
            status: import("@prisma/client").$Enums.FormVersionStatus;
        };
        form: {
            id: string;
            name: string;
            key: string;
            category: string;
            slug: string;
        };
        translations: Record<string, any>;
        previousVersion: {
            version: number;
            schema: Prisma.JsonValue;
        } | null;
        diff: {
            fieldsAdded: any[];
            fieldsRemoved: any[];
            fieldsModified: any[];
        } | null;
    }>;
    getReviewHistory(versionId: string): Promise<({
        action: string;
        operator: {
            id: string;
            name: string;
        } | null;
        comment: null;
        timestamp: string;
    } | {
        action: string;
        operator: {
            id: string;
            name: string;
        };
        comment: string | null;
        timestamp: string;
    })[]>;
    findMySubmissions(query: QueryMySubmissionsDto, userId: string): Promise<{
        items: {
            id: string;
            version: number;
            status: import("@prisma/client").$Enums.FormVersionStatus;
            form: {
                id: string;
                key: string;
                slug: string;
                name: string;
            } | null;
            submittedAt: string;
            reviewedAt: string | null;
            reviewedBy: {
                id: string;
                name: string;
            } | null;
            reviewComment: string | null;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    compareVersions(formIdentifier: string, fromVersion: number, toVersion: number): Promise<{
        fromVersion: number;
        toVersion: number;
        changes: {
            fieldsAdded: any[];
            fieldsRemoved: any[];
            fieldsModified: any[];
        };
        changelog: string | null;
    }>;
    private compareSchemas;
}
