import { Repository } from 'typeorm';
import { UserEntity } from './entity/users.entity';
import { UpdateUserDto } from './dto/update-user.dto';
import { UserResponseDto } from './dto/user-response.dto';
import { CreateAdminDto } from './dto/create-admin.dto';
import { UserRole, UserStatus } from 'common/enum/UserRole.enum';
import { BaseUserAbstract } from './abstracts/user.abstract';
import { UserFilterDto } from './dto/user-filter.dto';
import { ClientEntity } from 'modules/client/entities/client.entity';
import { PaginatedResponseDto } from 'common/utils/paginated-response.dto';
export declare class UserService extends BaseUserAbstract {
    private readonly userRepository;
    private readonly logger;
    constructor(userRepository: Repository<UserEntity>);
    countUsers(): Promise<number>;
    findAllUsers(page?: number, limit?: number): Promise<PaginatedResponseDto<UserResponseDto>>;
    findUserById(userId: number): Promise<UserResponseDto>;
    findUserByUserIdWithEntity(userId: number): Promise<UserEntity>;
    findUserByIdWithRoles(userId: number): Promise<UserResponseDto>;
    findUserByEmailWithRoles(email: string): Promise<UserResponseDto>;
    updateUserRoles(userId: number, roles: any[]): Promise<UserResponseDto>;
    removeUserRole(userId: number, roleId: string): Promise<UserResponseDto>;
    findUserByEmail(email: string): Promise<UserResponseDto>;
    createAdmin(userData: CreateAdminDto): Promise<UserResponseDto>;
    updateUser(userId: number, userData: UpdateUserDto): Promise<UserResponseDto>;
    upgradeUserToClient(userId: number, client: ClientEntity): Promise<UserResponseDto>;
    linkUserToClient(userId: number, clientId: string): Promise<UserResponseDto>;
    unlinkUserFromClient(userId: number, clientId: string): Promise<UserResponseDto>;
    deleteUser(userId: number): Promise<void>;
    findUsersByFilter(filter: UserFilterDto): Promise<PaginatedResponseDto<UserResponseDto>>;
    findUserByRole(role: UserRole, page: number, limit: number): Promise<PaginatedResponseDto<UserResponseDto>>;
    findUserByClientId(clientId: string, page?: number, limit?: number): Promise<PaginatedResponseDto<UserResponseDto>>;
    findUserByStatus(status: UserStatus, page: number, limit: number): Promise<PaginatedResponseDto<UserResponseDto>>;
    getUsersLinkedToClient(clientId: string, page: number, limit: number): Promise<PaginatedResponseDto<UserResponseDto>>;
    getUserCountByRole(role: UserRole): Promise<number>;
}
