import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { TemplateRepository } from '../repositories/template.repository';
import { Request } from 'express';
import { MeetingAttendanceAuditLogWriter } from './audit-log-writer.service';
export declare class TemplatesService {
    private readonly prisma;
    private readonly templateRepository;
    private readonly auditLogWriter;
    constructor(prisma: PrismaService, templateRepository: TemplateRepository, auditLogWriter: MeetingAttendanceAuditLogWriter);
    listTemplates(userEmail: string): Promise<{
        templates: ({
            creator: {
                displayName: string;
                email: string;
            };
            templateAttendees: ({
                user: {
                    displayName: string;
                    id: string;
                    email: string;
                    departmentMemberships: ({
                        department: {
                            code: string;
                            id: string;
                            name: string;
                        };
                        position: {
                            id: string;
                            name: string;
                            level: number;
                        } | null;
                    } & {
                        title: string | null;
                        id: string;
                        createdAt: Date;
                        userId: string;
                        updatedAt: Date;
                        organizationId: string;
                        departmentId: string;
                        positionId: string | null;
                        managerId: string | null;
                        isPrimary: boolean;
                        joinedAt: Date;
                        leftAt: Date | null;
                    })[];
                };
            } & {
                id: string;
                createdAt: Date;
                userId: string;
                templateId: string;
            })[];
        } & {
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            duration: number;
            name: string;
            updatedAt: Date;
            description: string | null;
            timezone: string;
            isPublic: boolean;
            creatorId: string;
        })[];
    }>;
    createTemplate(payload: {
        name?: string;
        title?: string;
        description?: string;
        duration?: string | number;
        location?: string;
        type?: string;
        isPublic?: boolean;
        attendeeIds?: string[];
    }, userEmail: string, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        template: {
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            duration: number;
            name: string;
            updatedAt: Date;
            description: string | null;
            timezone: string;
            isPublic: boolean;
            creatorId: string;
        };
    }>;
    createMeetingFromTemplate(templateId: string, payload: {
        startTime?: string;
        endTime?: string;
        customTitle?: string;
        customDescription?: string;
        customLocation?: string;
    }, request: Request | undefined, userEmail: string, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        meeting: {
            qrCodeOnline: string;
            qrCodeOffline: string;
            creator: {
                displayName: string;
                email: string;
            };
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.MeetingStatus;
            updatedAt: Date;
            description: string | null;
            startTime: Date;
            endTime: Date;
            timezone: string;
            creatorId: string;
            seriesId: string | null;
            instanceNumber: number | null;
            isSeriesMaster: boolean;
            hasCustomAttendees: boolean;
            city: string | null;
            enforceCheckinMode: boolean;
        };
        message: string;
    }>;
    updateTemplate(templateId: string, payload: {
        name?: string;
        title?: string;
        description?: string;
        duration?: string | number;
        location?: string;
        type?: string;
        isPublic?: boolean;
        attendeeIds?: string[];
    }, userEmail: string, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        template: ({
            templateAttendees: ({
                user: {
                    displayName: string;
                    id: string;
                    employeeId: string | null;
                    createdAt: Date;
                    tenantId: string | null;
                    status: import("@prisma/client").$Enums.UserStatus;
                    passwordHash: string | null;
                    username: string;
                    email: string;
                    avatar: string | null;
                    phone: string | null;
                    source: import("@prisma/client").$Enums.UserSource;
                    ldapDn: string | null;
                    ldapSyncedAt: Date | null;
                    externalId: string | null;
                    externalSource: string | null;
                    adpAoid: string | null;
                    adpLinkedAt: Date | null;
                    defaultRegion: string;
                    workCity: string | null;
                    hiredAt: Date | null;
                    terminatedAt: Date | null;
                    metadata: import("@prisma/client/runtime/library").JsonValue;
                    updatedAt: Date;
                    deletedAt: Date | null;
                };
            } & {
                id: string;
                createdAt: Date;
                userId: string;
                templateId: string;
            })[];
        } & {
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            duration: number;
            name: string;
            updatedAt: Date;
            description: string | null;
            timezone: string;
            isPublic: boolean;
            creatorId: string;
        }) | null;
    }>;
    deleteTemplate(templateId: string, userEmail: string, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
    }>;
}
