import type { ApiContext, PaginatedResult } from './_shared';
import type { RoleDto, RoleDetailDto } from './roles';
import type { UserTenantDto, UserGroupDto, UserConsolidatedRoleDto, UserApplicationAccessDto } from './crossCutting';
export interface UserListDto {
    id: string;
    email: string;
    firstName: string;
    lastName: string;
    fullName: string;
    isActive: boolean;
    userType: string;
    roles: string[];
    lastLoginAt: string | null;
    createdAt: string;
    entraObjectId: string | null;
    lastEntraSyncAt: string | null;
    entraUserPurpose: string | null;
    membershipSource: 'Direct' | 'Group' | 'Both';
    primaryGroupId: string | null;
    primaryGroupName: string | null;
}
export interface UserDetailDto {
    id: string;
    email: string;
    firstName: string;
    lastName: string;
    fullName: string;
    isActive: boolean;
    userType: string;
    roles: RoleDto[];
    lastLoginAt: string | null;
    createdAt: string;
    updatedAt: string | null;
    isLocked: boolean;
    lockoutEnd: string | null;
    lastUnlockReason: number | null;
    lockedBy: string | null;
    lockedAt: string | null;
    isTemporarilyLocked: boolean;
    temporaryLockoutEnd: string | null;
    entraObjectId: string | null;
    authProvider: string | null;
    lastEntraSyncAt: string | null;
    entraUserPurpose: string | null;
    departmentId: string | null;
    departmentName: string | null;
    jobTitleId: string | null;
    jobTitleName: string | null;
    companyId: string | null;
    companyName: string | null;
    officeId: string | null;
    officeName: string | null;
    employeeId: string | null;
    employeeType: string | null;
    employeeHireDate: string | null;
    employeeOrgData: string | null;
    managerId: string | null;
    managerName: string | null;
    sponsors: string | null;
    phoneNumber: string | null;
    mobilePhone: string | null;
    faxNumber: string | null;
    streetAddress: string | null;
    city: string | null;
    state: string | null;
    postalCode: string | null;
    country: string | null;
    otherEmails: string | null;
    proxyAddresses: string | null;
    imAddresses: string | null;
    mailNickname: string | null;
    emailConfirmed: boolean;
    hasCompletedOnboarding: boolean;
    mustChangePassword: boolean;
}
export interface UserHistoryDto {
    id: string;
    actionCode: number;
    actionName: string;
    fieldChanged: string | null;
    oldValue: string | null;
    newValue: string | null;
    changedByUserId: string | null;
    changedByUserName: string | null;
    createdAt: string;
}
export interface UpdateProfileRequest {
    firstName?: string;
    lastName?: string;
}
export interface UpdateOrganizationRequest {
    departmentId?: string | null;
    departmentName?: string | null;
    jobTitleId?: string | null;
    jobTitleName?: string | null;
    companyId?: string | null;
    companyName?: string | null;
    officeId?: string | null;
    officeName?: string | null;
    managerId?: string | null;
}
export interface UpdateJobInfoRequest {
    employeeId?: string | null;
    employeeType?: string | null;
    employeeHireDate?: string | null;
    employeeOrgData?: string | null;
}
export interface UpdatePhonesRequest {
    phoneNumber?: string | null;
    mobilePhone?: string | null;
    faxNumber?: string | null;
}
export interface UpdateAddressRequest {
    streetAddress?: string | null;
    city?: string | null;
    state?: string | null;
    postalCode?: string | null;
    country?: string | null;
}
export interface UpdateContactRequest {
    otherEmails?: string | null;
    proxyAddresses?: string | null;
    imAddresses?: string | null;
    mailNickname?: string | null;
}
export interface ReferenceItemDto {
    id: string;
    code: string;
    name: string;
}
export interface ReferenceListDto {
    id: string;
    code: string;
    name: string;
    description: string | null;
    isActive: boolean;
    isFromEntra: boolean;
    entraValue: string | null;
    userCount: number;
    createdAt: string;
    tenantId: string | null;
    tenantName: string | null;
}
export interface OfficeListDto extends ReferenceListDto {
    address: string | null;
    city: string | null;
    country: string | null;
}
export interface CreateReferenceRequest {
    code: string;
    name: string;
    description?: string;
}
export interface CreateOfficeRequest extends CreateReferenceRequest {
    address?: string;
    city?: string;
    country?: string;
}
export interface UpdateReferenceRequest {
    name: string;
    description?: string;
}
export interface UpdateOfficeRequest extends UpdateReferenceRequest {
    address?: string;
    city?: string;
    country?: string;
}
export interface OrganizationReferencesDto {
    departments: ReferenceItemDto[];
    companies: ReferenceItemDto[];
    jobTitles: ReferenceItemDto[];
    offices: ReferenceItemDto[];
    managers: ReferenceItemDto[];
}
export declare const UnlockReason: {
    readonly PasswordResetMalfunction: 1;
    readonly FalsePositive: 2;
    readonly UrgentBusinessNeed: 3;
    readonly TechnicalSystemError: 4;
    readonly SupportTicketVerified: 5;
};
export type UnlockReason = typeof UnlockReason[keyof typeof UnlockReason];
export interface UnlockAccountRequest {
    reason: UnlockReason;
    mustChangePassword: boolean;
}
export interface CreateUserRequest {
    email: string;
    password: string;
    firstName: string;
    lastName: string;
    roleIds?: string[];
}
export interface UpdateUserRequest {
    email?: string;
    firstName: string;
    lastName: string;
    roleIds?: string[];
}
export declare const createUsersApi: (apiContext: ApiContext) => {
    getAll: (params?: {
        page?: number;
        pageSize?: number;
        search?: string;
        isActive?: boolean;
        entraOnly?: boolean;
        roleId?: string;
        userType?: string;
        sortBy?: string;
        sortDesc?: boolean;
        globalScope?: boolean;
    }) => Promise<PaginatedResult<UserListDto>>;
    getById: (id: string) => Promise<UserDetailDto>;
    create: (data: CreateUserRequest) => Promise<UserDetailDto>;
    update: (id: string, data: UpdateUserRequest) => Promise<UserDetailDto>;
    sendPasswordResetLink: (id: string) => Promise<{
        message: string;
    }>;
    resetPasswordDirect: (id: string, temporaryPassword?: string) => Promise<{
        message: string;
        temporaryPassword: string;
        mustChangePassword: boolean;
    }>;
    activate: (id: string) => Promise<unknown>;
    deactivate: (id: string) => Promise<unknown>;
    unlock: (id: string, data: UnlockAccountRequest) => Promise<{
        message: string;
        mustChangePassword: boolean;
    }>;
    clearFailedAttempts: (id: string) => Promise<{
        message: string;
        clearedCount: number;
    }>;
    delete: (id: string) => Promise<unknown>;
    getSessions: (id: string) => Promise<UserSessionsDto>;
    endAllSessions: (id: string) => Promise<unknown>;
    endSession: (userId: string, sessionId: string) => Promise<unknown>;
    getActivity: (id: string) => Promise<UserActivityDto>;
    getCustomRole: (id: string) => Promise<RoleDetailDto | null>;
    createCustomRole: (id: string) => Promise<RoleDetailDto>;
    deleteCustomRole: (id: string) => Promise<unknown>;
    getHistory: (id: string, limit?: number) => Promise<UserHistoryDto[]>;
    restoreFromHistory: (userId: string, historyId: string) => Promise<{
        message: string;
        field: string;
        restoredValue: string;
    }>;
    getOrganizationReferences: () => Promise<OrganizationReferencesDto>;
    references: {
        getCompanies: (params?: {
            tenantId?: string;
            search?: string;
            isActive?: boolean;
            source?: "entra" | "manual";
        }) => Promise<ReferenceListDto[]>;
        getDepartments: (params?: {
            tenantId?: string;
            search?: string;
            isActive?: boolean;
            source?: "entra" | "manual";
        }) => Promise<ReferenceListDto[]>;
        getJobTitles: (params?: {
            tenantId?: string;
            search?: string;
            isActive?: boolean;
            source?: "entra" | "manual";
        }) => Promise<ReferenceListDto[]>;
        getOffices: (params?: {
            tenantId?: string;
            search?: string;
            isActive?: boolean;
            source?: "entra" | "manual";
        }) => Promise<OfficeListDto[]>;
        createCompany: (data: CreateReferenceRequest, tenantId?: string) => Promise<ReferenceListDto>;
        createDepartment: (data: CreateReferenceRequest, tenantId?: string) => Promise<ReferenceListDto>;
        createJobTitle: (data: CreateReferenceRequest, tenantId?: string) => Promise<ReferenceListDto>;
        createOffice: (data: CreateOfficeRequest, tenantId?: string) => Promise<OfficeListDto>;
        updateCompany: (id: string, data: UpdateReferenceRequest) => Promise<unknown>;
        updateDepartment: (id: string, data: UpdateReferenceRequest) => Promise<unknown>;
        updateJobTitle: (id: string, data: UpdateReferenceRequest) => Promise<unknown>;
        updateOffice: (id: string, data: UpdateOfficeRequest) => Promise<unknown>;
        activateCompany: (id: string) => Promise<unknown>;
        activateDepartment: (id: string) => Promise<unknown>;
        activateJobTitle: (id: string) => Promise<unknown>;
        activateOffice: (id: string) => Promise<unknown>;
        deactivateCompany: (id: string) => Promise<unknown>;
        deactivateDepartment: (id: string) => Promise<unknown>;
        deactivateJobTitle: (id: string) => Promise<unknown>;
        deactivateOffice: (id: string) => Promise<unknown>;
        deleteCompany: (id: string) => Promise<unknown>;
        deleteDepartment: (id: string) => Promise<unknown>;
        deleteJobTitle: (id: string) => Promise<unknown>;
        deleteOffice: (id: string) => Promise<unknown>;
    };
    updateProfile: (id: string, data: UpdateProfileRequest) => Promise<unknown>;
    updateOrganization: (id: string, data: UpdateOrganizationRequest) => Promise<unknown>;
    updateJobInfo: (id: string, data: UpdateJobInfoRequest) => Promise<unknown>;
    updatePhones: (id: string, data: UpdatePhonesRequest) => Promise<unknown>;
    updateAddress: (id: string, data: UpdateAddressRequest) => Promise<unknown>;
    updateContact: (id: string, data: UpdateContactRequest) => Promise<unknown>;
    getTenants: (id: string) => Promise<UserTenantDto[]>;
    getGroups: (id: string) => Promise<UserGroupDto[]>;
    getConsolidatedRoles: (id: string, tenantId?: string) => Promise<UserConsolidatedRoleDto[]>;
    getApplicationAccess: (id: string, tenantId?: string) => Promise<UserApplicationAccessDto[]>;
};
import type { UserSessionsDto, UserActivityDto } from './dashboard';
export type { UserSessionsDto, UserActivityDto };
//# sourceMappingURL=users.d.ts.map