import { PrismaService } from "../../../../core/database/prisma/prisma.service";
import { CreateFormDefinitionDto, UpdateFormDefinitionDto, QueryFormDefinitionDto, PublishFormDefinitionDto, ArchiveFormDefinitionDto, CopyFormDefinitionDto } from '../dto';
import { FormIdentifierResolverService } from './form-identifier-resolver.service';
export declare class FormDefinitionService {
    private readonly prisma;
    private readonly identifierResolver;
    private readonly logger;
    constructor(prisma: PrismaService, identifierResolver: FormIdentifierResolverService);
    create(dto: CreateFormDefinitionDto, createdBy: string): Promise<any>;
    findAll(query: QueryFormDefinitionDto, userId?: string): Promise<{
        items: any[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(identifier: string): Promise<any>;
    findOneWithDefaultVersion(identifier: string): Promise<any>;
    update(identifier: string, dto: UpdateFormDefinitionDto, updatedBy: string): Promise<any>;
    updateSlug(identifier: string, newSlug: string, updatedBy: string): Promise<any>;
    addAliases(identifier: string, newAliases: string[], updatedBy: string): Promise<any>;
    removeAlias(identifier: string, aliasToRemove: string, updatedBy: string): Promise<any>;
    remove(identifier: string): Promise<{
        id: any;
        key: any;
        slug: any;
        deleted: boolean;
    }>;
    archive(identifier: string, dto?: ArchiveFormDefinitionDto): Promise<any>;
    publish(identifier: string, dto?: PublishFormDefinitionDto): Promise<any>;
    getStats(identifier: string): Promise<{
        formId: any;
        totalInstances: number;
        draftCount: number;
        submittedCount: number;
        approvedCount: number;
        rejectedCount: number;
        cancelledCount: number;
        submissionRate: number;
        averageCompletionTime: number;
        lastSubmittedAt: Date | null;
    }>;
    copy(identifier: string, dto: CopyFormDefinitionDto, createdBy: string): Promise<any>;
    private generateFormKey;
    private checkAliasesConflict;
    private formatFormDefinitionResponse;
}
