import { Model, Types } from 'mongoose';
import { UserRole, UserStatus } from '../common/constants/enums';
import { User, UserDocument } from './schemas/user.schema';
import { ManagerSummary, NormalizedCreateUserInput } from './user-api.mapper';
export declare class UsersService {
    private readonly userModel;
    constructor(userModel: Model<UserDocument>);
    toPublic(user: UserDocument): {
        id: string;
        uid: string;
        email: string;
        fullName: string;
        name?: string;
        employeeCode: string;
        mobileNumber?: string;
        sittingLocation?: string;
        reportingManagerId?: string;
        role: UserRole;
        deviceId?: string;
        profileImage?: string;
        status: UserStatus;
        fcmToken?: string;
        isRooted: boolean;
        presence: import("../common/constants/enums").EmployeePresence;
        lastSeenAt?: Date;
        _id: Types.ObjectId;
        __v: number;
    };
    toClientUserWithManager(user: UserDocument): Promise<{
        id: string;
        uid: string;
        email: string;
        name: string | null;
        fullName: string | null;
        employeeCode: string;
        role: string;
        mobile: string | null;
        mobileNumber: string | null;
        sitingLocation: string | null;
        sittingLocation: string | null;
        reportingManagerId: string | null;
        reportingManagerName: string | null;
        reportingManager: ManagerSummary | undefined;
        deviceId: string | null;
        profileImage: string | null;
        status: string | null;
        presence: string | null;
        createdAt: Date | null;
        updatedAt: Date | null;
    }>;
    private isActiveUser;
    private isReportingManagerRole;
    private resolveReportingManagerRef;
    findById(id: string): Promise<UserDocument | null>;
    findByUid(uid: string): Promise<UserDocument | null>;
    syncUserRole(uid: string, role: UserRole): Promise<void>;
    ensureCanonicalRole(user: UserDocument): Promise<UserDocument>;
    findByEmail(email: string): Promise<UserDocument | null>;
    verifyPassword(user: UserDocument, password: string): Promise<boolean>;
    createUser(data: NormalizedCreateUserInput): Promise<UserDocument>;
    updatePassword(uid: string, password: string): Promise<void>;
    updateSelf(uid: string, data: {
        fullName?: string;
        employeeCode?: string;
        fcmToken?: string;
    }): Promise<{
        id: string;
        uid: string;
        email: string;
        fullName: string;
        name?: string;
        employeeCode: string;
        mobileNumber?: string;
        sittingLocation?: string;
        reportingManagerId?: string;
        role: UserRole;
        deviceId?: string;
        profileImage?: string;
        status: UserStatus;
        fcmToken?: string;
        isRooted: boolean;
        presence: import("../common/constants/enums").EmployeePresence;
        lastSeenAt?: Date;
        _id: Types.ObjectId;
        __v: number;
    }>;
    adminUpdate(uid: string, data: Partial<{
        fullName: string;
        employeeCode: string;
        email: string;
        mobileNumber: string;
        sittingLocation: string;
        reportingManagerId: string | null;
        reportingManagerRef: string;
        role: UserRole;
        status: UserStatus;
        deviceId: string;
        profileImage: string;
    }>): Promise<{
        id: string;
        uid: string;
        email: string;
        name: string | null;
        fullName: string | null;
        employeeCode: string;
        role: string;
        mobile: string | null;
        mobileNumber: string | null;
        sitingLocation: string | null;
        sittingLocation: string | null;
        reportingManagerId: string | null;
        reportingManagerName: string | null;
        reportingManager: ManagerSummary | undefined;
        deviceId: string | null;
        profileImage: string | null;
        status: string | null;
        presence: string | null;
        createdAt: Date | null;
        updatedAt: Date | null;
    }>;
    list(params: {
        role?: UserRole;
        status?: UserStatus;
        search?: string;
        reportingManagerId?: string;
        cursor?: string;
        limit?: number;
    }): Promise<{
        items: {
            id: string;
            uid: string;
            email: string;
            name: string | null;
            fullName: string | null;
            employeeCode: string;
            role: string;
            mobile: string | null;
            mobileNumber: string | null;
            sitingLocation: string | null;
            sittingLocation: string | null;
            reportingManagerId: string | null;
            reportingManagerName: string | null;
            reportingManager: ManagerSummary | undefined;
            deviceId: string | null;
            profileImage: string | null;
            status: string | null;
            presence: string | null;
            createdAt: Date | null;
            updatedAt: Date | null;
        }[];
        nextCursor: string | null;
    }>;
    deactivate(uid: string): Promise<{
        id: string;
        uid: string;
        email: string;
        fullName: string;
        name?: string;
        employeeCode: string;
        mobileNumber?: string;
        sittingLocation?: string;
        reportingManagerId?: string;
        role: UserRole;
        deviceId?: string;
        profileImage?: string;
        status: UserStatus;
        fcmToken?: string;
        isRooted: boolean;
        presence: import("../common/constants/enums").EmployeePresence;
        lastSeenAt?: Date;
        _id: Types.ObjectId;
        __v: number;
    }>;
    activate(uid: string): Promise<{
        id: string;
        uid: string;
        email: string;
        fullName: string;
        name?: string;
        employeeCode: string;
        mobileNumber?: string;
        sittingLocation?: string;
        reportingManagerId?: string;
        role: UserRole;
        deviceId?: string;
        profileImage?: string;
        status: UserStatus;
        fcmToken?: string;
        isRooted: boolean;
        presence: import("../common/constants/enums").EmployeePresence;
        lastSeenAt?: Date;
        _id: Types.ObjectId;
        __v: number;
    }>;
    bindDevice(uid: string, deviceId: string, isRooted?: boolean): Promise<(import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, User, {}, import("mongoose").DefaultSchemaOptions> & User & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    } & {
        id: string;
    }, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").Document<unknown, {}, User, {}, import("mongoose").DefaultSchemaOptions> & User & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    } & {
        id: string;
    } & Required<{
        _id: Types.ObjectId;
    }>) | null>;
    assertDeviceMatch(user: UserDocument, deviceId?: string): Promise<void>;
    getDirectReportIds(managerId: string): Promise<string[]>;
    requireByUid(uid: string): Promise<UserDocument>;
    listReportingManagers(): Promise<{
        id: string;
        uid: string;
        email: string;
        name: string | null;
        fullName: string | null;
        employeeCode: string;
        role: string;
        mobile: string | null;
        mobileNumber: string | null;
        sitingLocation: string | null;
        sittingLocation: string | null;
        reportingManagerId: string | null;
        reportingManagerName: string | null;
        reportingManager: ManagerSummary | undefined;
        deviceId: string | null;
        profileImage: string | null;
        status: string | null;
        presence: string | null;
        createdAt: Date | null;
        updatedAt: Date | null;
    }[]>;
    count(): Promise<number>;
}
