import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma } from '@prisma/client';
import { MeetingAttendanceAuditLogWriter } from './audit-log-writer.service';
import type { Request } from 'express';
export declare class MeetingUsersService {
    private readonly prisma;
    private readonly auditLogWriter;
    constructor(prisma: PrismaService, auditLogWriter: MeetingAttendanceAuditLogWriter);
    getUserByEmail(email: string): Promise<{
        meetingRole: "Administrator" | "Employee" | "MeetingManager" | "Leader";
        roles: ({
            role: {
                code: string;
                id: string;
                createdAt: Date;
                name: string;
                updatedAt: Date;
                description: string | null;
                isBuiltIn: boolean;
                enabled: boolean;
            };
        } & {
            id: string;
            createdAt: Date;
            userId: string;
            organizationId: string | null;
            roleId: string;
            lastReviewedAt: Date | null;
            lastReviewedBy: string | null;
            reviewComment: string | null;
        })[];
        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;
        })[];
        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: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
    }>;
    listUsers(query: {
        page?: string;
        limit?: string;
        search?: string;
        role?: string;
        department?: string;
    }): Promise<{
        users: {
            id: string;
            email: string;
            displayName: string;
            role: "Administrator" | "Employee" | "MeetingManager" | "Leader";
            department: {
                code: string;
                id: string;
                name: string;
            };
            position: {
                id: string;
                name: string;
                level: number;
            } | null;
            isActive: boolean;
            createdAt: Date;
            createdMeetingsCount: number;
            attendancesCount: number;
        }[];
        pagination: {
            page: number;
            limit: number;
            total: number;
            totalPages: number;
        };
        departments: string[];
    }>;
    createUser(payload: {
        email?: string;
        userId?: string;
        role?: string;
    }, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        user: {
            id: string;
            email: string;
            displayName: string;
            role: "Administrator" | "Employee" | "MeetingManager" | "Leader";
        };
        message: string;
    }>;
    getUserDetails(id: string): Promise<{
        id: string;
        email: string;
        displayName: string;
        role: "Administrator" | "Employee" | "MeetingManager" | "Leader";
        department: {
            code: string;
            id: string;
            name: string;
        };
        position: {
            id: string;
            name: string;
            level: number;
        } | null;
        isActive: boolean;
        createdAt: Date;
        createdMeetings: {
            title: string;
            id: string;
            status: import("@prisma/client").$Enums.MeetingStatus;
            startTime: Date;
        }[];
        attendances: {
            meeting: {
                title: string;
                id: string;
                startTime: Date;
            };
            id: string;
            status: import("@prisma/client").$Enums.AttendanceStatus;
            checkinTime: Date | null;
        }[];
    }>;
    updateUser(id: string, payload: {
        role?: string;
    }, actor: {
        id: string;
        role: string;
    }, request?: Request, auditActor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
    }>;
    disableUser(id: string, actor: {
        id: string;
        role: string;
    }, request?: Request, auditActor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
    }>;
    searchUsers(query: string, limit: string): Promise<{
        users: {
            id: string;
            displayName: string;
            email: string;
            department: {
                code: string;
                id: string;
                name: string;
            };
            position: {
                id: string;
                name: string;
                level: number;
            } | null;
        }[];
    }>;
    importUsers(payload: {
        users?: Array<{
            email?: string;
            role?: string;
        }>;
    }, request?: Request, actor?: {
        userId?: string;
        id?: string;
        email?: string;
        displayName?: string;
        username?: string;
        roles?: any[];
    }): Promise<{
        message: string;
        results: {
            success: number;
            failed: number;
            errors: string[];
            updated: Array<{
                email: string;
                role: string;
            }>;
        };
    }>;
    resetPassword(): Promise<void>;
    permanentDeleteUser(id: string, actor: {
        id: string;
        role: string;
    }): Promise<{
        message: string;
    }>;
    private updateMeetingRoles;
}
