import { FormDefinitionService } from '../services';
import { CreateFormDefinitionDto, UpdateFormDefinitionDto, QueryFormDefinitionDto, PublishFormDefinitionDto, ArchiveFormDefinitionDto, CopyFormDefinitionDto } from '../dto';
export declare class FormsController {
    private readonly formDefinitionService;
    constructor(formDefinitionService: FormDefinitionService);
    create(dto: CreateFormDefinitionDto, userId: string): Promise<any>;
    findAll(query: QueryFormDefinitionDto, userId: string): Promise<{
        items: any[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(formIdentifier: string): Promise<any>;
    findOneWithDefault(formIdentifier: string): Promise<any>;
    update(formIdentifier: string, dto: UpdateFormDefinitionDto, userId: string): Promise<any>;
    remove(formIdentifier: string): Promise<{
        id: any;
        key: any;
        slug: any;
        deleted: boolean;
    }>;
    archive(formIdentifier: string, dto?: ArchiveFormDefinitionDto): Promise<any>;
    unarchive(formIdentifier: string, userId: string): Promise<any>;
    updateSlug(formIdentifier: string, newSlug: string, userId: string): Promise<any>;
    addAliases(formIdentifier: string, aliases: string[], userId: string): Promise<any>;
    removeAlias(formIdentifier: string, alias: string, userId: string): Promise<any>;
    getStats(formIdentifier: string): Promise<{
        formId: any;
        totalInstances: number;
        draftCount: number;
        submittedCount: number;
        approvedCount: number;
        rejectedCount: number;
        cancelledCount: number;
        submissionRate: number;
        averageCompletionTime: number;
        lastSubmittedAt: Date | null;
    }>;
    publish(formIdentifier: string, dto?: PublishFormDefinitionDto): Promise<any>;
    duplicate(formIdentifier: string, dto: CopyFormDefinitionDto, userId: string): Promise<any>;
    getCategories(): Promise<{
        categories: string[];
    }>;
    batchDelete(ids: string[]): Promise<{
        deleted: number;
        failed: number;
        errors: Array<{
            id: string;
            error: string;
        }>;
    }>;
    batchArchive(ids: string[]): Promise<{
        archived: number;
        failed: number;
        errors: Array<{
            id: string;
            error: string;
        }>;
    }>;
}
