import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { SeriesRepository } from '../repositories/series.repository';
import { MeetingRepository } from '../repositories/meeting.repository';
import { RequiredAttendeeRepository } from '../repositories/required-attendee.repository';
import { Request } from 'express';
import { MeetingAttendanceAuditLogWriter } from './audit-log-writer.service';
export declare class SeriesService {
    private readonly prisma;
    private readonly seriesRepository;
    private readonly meetingRepository;
    private readonly requiredAttendeeRepository;
    private readonly auditLogWriter;
    constructor(prisma: PrismaService, seriesRepository: SeriesRepository, meetingRepository: MeetingRepository, requiredAttendeeRepository: RequiredAttendeeRepository, auditLogWriter: MeetingAttendanceAuditLogWriter);
    listSeries(): Promise<{
        series: ({
            creator: {
                displayName: 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;
                })[];
            };
            meetings: {
                location: string | null;
                title: string;
                id: string;
                status: import("@prisma/client").$Enums.MeetingStatus;
                startTime: Date;
                endTime: Date;
                qrCodeOnline: string | null;
                qrCodeOffline: string | null;
                instanceNumber: number | null;
            }[];
        } & {
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            startDate: Date;
            endDate: Date | null;
            updatedAt: Date;
            description: string | null;
            isActive: boolean;
            timezone: string;
            frequency: number;
            creatorId: string;
            city: string | null;
            enforceCheckinMode: boolean;
            pattern: import("@prisma/client").$Enums.RecurrencePattern;
            maxOccurrences: number | null;
        })[];
    }>;
    createSeries(payload: {
        title?: string;
        description?: string;
        pattern?: string;
        frequency?: number;
        startDate?: string;
        endDate?: string;
        maxOccurrences?: number;
        location?: string;
        type?: string;
        timezone?: string;
        duration?: number;
        city?: string;
        enforceCheckinMode?: boolean;
        attendees?: Array<{
            userId?: string;
            role?: string;
        }>;
    }, request: Request | undefined, userEmail: string, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        series: {
            type: import("@prisma/client").$Enums.MeetingType;
            location: string | null;
            title: string;
            id: string;
            createdAt: Date;
            startDate: Date;
            endDate: Date | null;
            updatedAt: Date;
            description: string | null;
            isActive: boolean;
            timezone: string;
            frequency: number;
            creatorId: string;
            city: string | null;
            enforceCheckinMode: boolean;
            pattern: import("@prisma/client").$Enums.RecurrencePattern;
            maxOccurrences: number | null;
        };
        meetings: any[];
        message: string;
    }>;
    getSeriesDetails(id: string): Promise<{
        creator: ({
            displayName: 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;
            })[];
        } & {
            department: {
                id?: string;
                name?: string;
                code?: string | null;
            } | null;
            position: {
                id?: string;
                name?: string;
                level?: number | null;
            } | null;
            departmentMemberships?: Array<{
                isPrimary?: boolean;
                department?: {
                    id?: string;
                    name?: string;
                    code?: string | null;
                } | null;
                position?: {
                    id?: string;
                    name?: string;
                    level?: number | null;
                } | null;
            }>;
        }) | null | undefined;
        meetings: {
            attendances: {
                user: ({
                    displayName: 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;
                    })[];
                } & {
                    department: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                    departmentMemberships?: Array<{
                        isPrimary?: boolean;
                        department?: {
                            id?: string;
                            name?: string;
                            code?: string | null;
                        } | null;
                        position?: {
                            id?: string;
                            name?: string;
                            level?: number | null;
                        } | null;
                    }>;
                }) | null | undefined;
                id: string;
                createdAt: Date;
                userId: string;
                deviceId: string | null;
                status: import("@prisma/client").$Enums.AttendanceStatus;
                updatedAt: Date;
                meetingId: string;
                checkinTime: Date | null;
                checkoutTime: Date | null;
                isLate: boolean;
                isEarlyLeave: boolean;
                notes: string | null;
                checkinType: import("@prisma/client").$Enums.CheckinType | null;
            }[];
            requiredAttendees: {
                user: ({
                    displayName: 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;
                    })[];
                } & {
                    department: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                    departmentMemberships?: Array<{
                        isPrimary?: boolean;
                        department?: {
                            id?: string;
                            name?: string;
                            code?: string | null;
                        } | null;
                        position?: {
                            id?: string;
                            name?: string;
                            level?: number | null;
                        } | null;
                    }>;
                }) | null | undefined;
                role: import("@prisma/client").$Enums.AttendeeRole;
                id: string;
                createdAt: Date;
                userId: string;
                meetingId: string;
                checkinMode: import("@prisma/client").$Enums.AttendanceMode | null;
            }[];
            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;
            qrCodeOnline: string | null;
            qrCodeOffline: string | null;
            seriesId: string | null;
            instanceNumber: number | null;
            isSeriesMaster: boolean;
            hasCustomAttendees: boolean;
            city: string | null;
            enforceCheckinMode: boolean;
        }[];
        type: import("@prisma/client").$Enums.MeetingType;
        location: string | null;
        title: string;
        id: string;
        createdAt: Date;
        startDate: Date;
        endDate: Date | null;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        timezone: string;
        frequency: number;
        creatorId: string;
        city: string | null;
        enforceCheckinMode: boolean;
        pattern: import("@prisma/client").$Enums.RecurrencePattern;
        maxOccurrences: number | null;
    }>;
    updateSeries(id: string, payload: {
        title?: string;
        description?: string;
        location?: string;
        isActive?: boolean;
        pattern?: string;
        frequency?: number;
        endDate?: string;
        maxOccurrences?: number;
        type?: string;
        timezone?: string;
        city?: string | null;
        enforceCheckinMode?: boolean;
    }, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        newMeetingsCreated: number;
        message: string;
        type: import("@prisma/client").$Enums.MeetingType;
        location: string | null;
        title: string;
        id: string;
        createdAt: Date;
        startDate: Date;
        endDate: Date | null;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        timezone: string;
        frequency: number;
        creatorId: string;
        city: string | null;
        enforceCheckinMode: boolean;
        pattern: import("@prisma/client").$Enums.RecurrencePattern;
        maxOccurrences: number | null;
    }>;
    deleteSeries(id: string, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
        type: string;
    }>;
    getSeriesHistory(id: string): Promise<{
        meetings: {
            stats: {
                totalRequired: number;
                actualAttendees: number;
                attendanceRate: number;
                absentees: number;
            };
            creator: ({
                displayName: 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;
                })[];
            } & {
                department: {
                    id?: string;
                    name?: string;
                    code?: string | null;
                } | null;
                position: {
                    id?: string;
                    name?: string;
                    level?: number | null;
                } | null;
                departmentMemberships?: Array<{
                    isPrimary?: boolean;
                    department?: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position?: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                }>;
            }) | null | undefined;
            attendances: {
                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;
                    })[];
                } & {
                    department: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                    departmentMemberships?: Array<{
                        isPrimary?: boolean;
                        department?: {
                            id?: string;
                            name?: string;
                            code?: string | null;
                        } | null;
                        position?: {
                            id?: string;
                            name?: string;
                            level?: number | null;
                        } | null;
                    }>;
                }) | null | undefined;
                id: string;
                createdAt: Date;
                userId: string;
                deviceId: string | null;
                status: import("@prisma/client").$Enums.AttendanceStatus;
                updatedAt: Date;
                meetingId: string;
                checkinTime: Date | null;
                checkoutTime: Date | null;
                isLate: boolean;
                isEarlyLeave: boolean;
                notes: string | null;
                checkinType: import("@prisma/client").$Enums.CheckinType | null;
            }[];
            requiredAttendees: {
                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;
                    })[];
                } & {
                    department: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                    departmentMemberships?: Array<{
                        isPrimary?: boolean;
                        department?: {
                            id?: string;
                            name?: string;
                            code?: string | null;
                        } | null;
                        position?: {
                            id?: string;
                            name?: string;
                            level?: number | null;
                        } | null;
                    }>;
                }) | null | undefined;
                role: import("@prisma/client").$Enums.AttendeeRole;
                id: string;
                createdAt: Date;
                userId: string;
                meetingId: string;
                checkinMode: import("@prisma/client").$Enums.AttendanceMode | null;
            }[];
            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;
            qrCodeOnline: string | null;
            qrCodeOffline: string | null;
            seriesId: string | null;
            instanceNumber: number | null;
            isSeriesMaster: boolean;
            hasCustomAttendees: boolean;
            city: string | null;
            enforceCheckinMode: boolean;
        }[];
        summary: {
            totalMeetings: number;
            averageAttendanceRate: number;
        };
    }>;
    updateSeriesSchedule(seriesId: string, payload: {
        startTime?: string;
        duration?: string;
        timezone?: string;
    }, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
        updatedCount: number;
        success?: undefined;
        updatedMeetings?: undefined;
        errors?: undefined;
    } | {
        success: boolean;
        message: string;
        updatedCount: number;
        updatedMeetings: any[];
        errors: {
            meetingId: string;
            title: string;
            error: string;
        }[] | undefined;
    }>;
    getSeriesAttendees(seriesId: string, actor: {
        id: string;
        role: string;
        permissions?: string[];
    }): Promise<{
        series: {
            id: string;
            title: string;
            description: string | null;
        };
        defaultAttendees: {
            id: string;
            role: import("@prisma/client").$Enums.AttendeeRole;
            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;
                })[];
            } & {
                department: {
                    id?: string;
                    name?: string;
                    code?: string | null;
                } | null;
                position: {
                    id?: string;
                    name?: string;
                    level?: number | null;
                } | null;
                departmentMemberships?: Array<{
                    isPrimary?: boolean;
                    department?: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position?: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                }>;
            }) | null | undefined;
        }[];
        meetings: {
            id: string;
            title: string;
            startTime: Date;
            instanceNumber: number | null;
            hasCustomAttendees: boolean;
            attendees: {
                id: string;
                role: import("@prisma/client").$Enums.AttendeeRole;
                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;
                    })[];
                } & {
                    department: {
                        id?: string;
                        name?: string;
                        code?: string | null;
                    } | null;
                    position: {
                        id?: string;
                        name?: string;
                        level?: number | null;
                    } | null;
                    departmentMemberships?: Array<{
                        isPrimary?: boolean;
                        department?: {
                            id?: string;
                            name?: string;
                            code?: string | null;
                        } | null;
                        position?: {
                            id?: string;
                            name?: string;
                            level?: number | null;
                        } | null;
                    }>;
                }) | null | undefined;
            }[];
        }[];
    }>;
    setSeriesAttendees(seriesId: string, payload: {
        attendees?: any[];
        action?: string;
    }, actor: {
        id: string;
        role: string;
        permissions?: string[];
    }): Promise<{
        message: string;
    }>;
    updateSeriesAttendeeRole(seriesId: string, payload: {
        attendeeId?: string;
        newRole?: string;
    }, actor: {
        id: string;
        role: string;
        permissions?: string[];
    }): Promise<{
        success: boolean;
        message: string;
        updatedCount: number;
        affectedMeetings: number;
        newRole: string;
        attendeeInfo: {
            userId: string;
        };
    }>;
    deleteSeriesAttendee(seriesId: string, payload: {
        attendeeId?: string;
    }, actor: {
        id: string;
        role: string;
        permissions?: string[];
    }): Promise<{
        success: boolean;
        message: string;
        deletedCount: number;
        affectedMeetings: number;
        attendeeInfo: {
            userId: string;
        };
    }>;
    updateSeriesMeeting(seriesId: string, meetingId: string, payload: {
        title?: string;
        description?: string;
        startTime?: string;
        endTime?: string;
        location?: string;
        status?: string;
        reason?: string;
    }, actor?: {
        userId?: string;
        id?: string;
        email?: string;
    }): Promise<{
        meeting: {
            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;
            qrCodeOnline: string | null;
            qrCodeOffline: string | null;
            seriesId: string | null;
            instanceNumber: number | null;
            isSeriesMaster: boolean;
            hasCustomAttendees: boolean;
            city: string | null;
            enforceCheckinMode: boolean;
        };
        message: string;
    }>;
    cancelSeriesMeeting(seriesId: string, meetingId: string): Promise<{
        message: string;
    }>;
    private normalizeAttendeeRole;
    private lockOutlookBindingForMeeting;
    private generateMeetingInstances;
    updateSeriesEnforceCheckinMode(seriesId: string, enforceCheckinMode: boolean, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
    }): Promise<{
        clearedAttendeeOverrides?: number | undefined;
        seriesId: any;
        enforceCheckinMode: any;
        updatedMeetingCount: number;
    }>;
    listSeriesAttendeePreferences(seriesId: string, query: {
        page?: number | string;
        pageSize?: number | string;
        keyword?: string;
    }): Promise<{
        items: {
            userId: string;
            displayName: string;
            email: string;
            defaultCheckinMode: any;
            updatedByUserId: any;
            updatedAt: any;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    upsertSeriesAttendeePreferences(seriesId: string, preferences: Array<{
        userId: string;
        defaultCheckinMode: 'ON_SITE' | 'ONLINE';
    }>, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
    }): Promise<{
        seriesId: string;
        created: number;
        updated: number;
        skippedUnknownUserIds: string[];
    }>;
    deleteSeriesAttendeePreference(seriesId: string, userId: string, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
    }): Promise<{
        seriesId: string;
        userId: string;
        removed: boolean;
    }>;
}
