import { ProgramUserAttendance } from 'src/common/entities';
import { OnlineTypeEnum } from 'src/common/enum/online-type.enum';
import { SessionLaunchMode } from 'src/common/enum/session-launch-mode.enum';
import { AttendanceEvent } from 'src/common/interfaces/attendance-event.interface';
import { AttendanceStatus } from 'src/common/enum/attendance-status.enum';
import { AttendanceSourceEnum } from 'src/common/enum/attendance-source.enum';
export interface SessionAttendanceFilter {
    page: number;
    limit: number;
    isAttended?: boolean;
    search?: string;
}
export interface PaginatedAttendance {
    data: ProgramUserAttendance[];
    total: number;
}
export type AttendanceBreakdown = Record<string, number>;
export interface AttendanceClientMeta {
    modeOfJoining: string | null;
    deviceType: string | null;
    deviceInfo: string | null;
    joinWithOthers: boolean;
    attended: boolean;
    fullName: string | null;
}
export interface JoinSessionResult {
    joinUrl: string;
    onlineType: OnlineTypeEnum;
    launchMode: SessionLaunchMode;
    meetingId: string | null;
    meetingPassword: string | null;
    attendanceMarked: boolean;
}
export interface AttendanceRecord {
    attendanceId: number;
    userId: number;
    fullName: string;
    email: string;
    mobile: string;
    isAttended: boolean;
    attendanceStatus: AttendanceStatus;
    decidedBySource: AttendanceSourceEnum | null;
    checkedInAt: Date | null;
    attendanceEvents: AttendanceEvent[];
}
export interface SessionReportSummary {
    sessionId: number;
    sessionName: string;
    startsAt?: Date;
    totalRegistrants: number;
    totalAttended: number;
    attendanceRate: string;
    breakdown: AttendanceBreakdown;
}
export interface SessionAttendanceReport {
    sessionId: number;
    sessionName: string;
    totalRegistrants: number;
    totalAttended: number;
    attendanceRate: string;
    breakdown: AttendanceBreakdown;
    records: AttendanceRecord[];
    pagination: {
        page: number;
        limit: number;
        total: number;
    };
}
export interface ProgramAttendanceReport {
    programId: number;
    sessions: SessionReportSummary[];
    overallAttendanceRate: string;
}
export interface RegistrationManualMarks {
    registrationId: number;
    rm: boolean | null;
    coordinator: boolean | null;
    attendanceStatus: AttendanceStatus;
    decidedBySource: AttendanceSourceEnum | null;
}
export interface RecordZoomJoinParams {
    sessionId: number;
    programId: number;
    registrationId: number;
    userId: number | null;
    fullName: string | null;
    email: string | null;
    mobile: string | null;
    occurredAt: Date;
}
export interface SessionAttendanceLockRecord {
    sessionId: number;
    isAttendanceLocked: boolean;
    attendanceLockedBy: number | null;
    attendanceLockedAt: Date | null;
}
