import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { MeetingRepository } from '../repositories/meeting.repository';
import { AttendanceRepository } from '../repositories/attendance.repository';
import { RequiredAttendeeRepository } from '../repositories/required-attendee.repository';
import { MeetingAttendanceAuditLogWriter } from './audit-log-writer.service';
import type { Request } from 'express';
export type AllowedCheckinMode = {
    mode: 'ON_SITE' | 'ONLINE' | null;
    source: 'MEETING_OVERRIDE' | 'SERIES_PREFERENCE' | 'CITY_DERIVED';
};
export declare class CheckinService {
    private readonly prisma;
    private readonly meetingRepository;
    private readonly attendanceRepository;
    private readonly requiredAttendeeRepository;
    private readonly auditLogWriter;
    constructor(prisma: PrismaService, meetingRepository: MeetingRepository, attendanceRepository: AttendanceRepository, requiredAttendeeRepository: RequiredAttendeeRepository, auditLogWriter: MeetingAttendanceAuditLogWriter);
    checkin(meetingId: string, payload: {
        qrData?: string;
        qrType?: string;
        checkinType?: string;
        attendanceStatus?: string;
        deviceId?: string;
    }, userId: string): Promise<{
        message: string;
        attendance: {
            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;
                })[];
            };
            meeting: {
                title: string;
                id: string;
                startTime: Date;
            };
        } & {
            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;
        };
        isLate: boolean;
        debug: {
            deviceId: string | undefined;
            deviceIdType: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
            attendanceDeviceId: string | null;
        };
    }>;
    resolveAllowedCheckinMode(meeting: {
        id: string;
        city?: string | null;
        seriesId?: string | null;
    }, requiredAttendee: {
        userId: string;
        checkinMode?: 'ON_SITE' | 'ONLINE' | null;
    }, user: {
        id: string;
        workCity?: string | null;
    }): Promise<AllowedCheckinMode>;
    private normalizeQrType;
    guestCheckin(meetingId: string, payload: {
        name: string;
        email?: string;
        attendanceStatus?: string;
        qrType?: string;
        deviceId?: string;
    }): Promise<{
        message: string;
        attendance: {
            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;
                })[];
            };
            meeting: {
                title: string;
                id: string;
                startTime: Date;
            };
        } & {
            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;
        };
        isLate: boolean;
        debug: {
            deviceId: string | undefined;
            deviceIdType: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
            attendanceDeviceId: string | null;
        };
    }>;
    updateAttendanceStatus(meetingId: string, userId: string, payload: {
        status: string;
        notes?: string;
    }, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        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;
            })[];
        };
        meeting: {
            title: string;
            id: string;
            startTime: Date;
        };
    } & {
        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;
    }>;
}
