import { Admin, Driver, Task, User } from '@bringg/types';
import { CommonOptions } from '../../Core/RouteGenerator';
import Session from '../../Services/Identity/Session';
import { PubSubService } from '../../Services/PubSubService';
import { KeysetPaginationRequest } from '../../utils/consts/keyset-pagination.consts';
import UsersStore from '../Store/UsersStore';
import { AllDriversResponse, AllUsersKeysetPaginationResponse, AllUsersResponse } from '../User.consts';
import { GetAllDriversOptions } from '../Users';
export default class UsersService extends PubSubService {
    store: UsersStore;
    constructor(session: Session, store: UsersStore);
    create(user: Partial<User>): Promise<User>;
    getDriversByTeam(teamId: number): Promise<Driver[]>;
    get(userId: number): Promise<User>;
    getMany({ usersIds, page, limit }: {
        usersIds: number[];
        page?: number;
        limit?: number;
    }, commonOptions?: CommonOptions): Promise<AllUsersResponse>;
    getAll(page?: number, limit?: number): Promise<AllUsersResponse>;
    getAllKeysetPagination(request: KeysetPaginationRequest<null>): Promise<AllUsersKeysetPaginationResponse>;
    invite(userId: number): Promise<User>;
    unlock(userId: number): Promise<boolean>;
    assignedTasksCount(userId: number): Promise<number>;
    totalEmployeesCount(): Promise<number>;
    totalDriversCount(): Promise<number>;
    inviteByEmail(userId: number): Promise<User>;
    validatePhone(phone: string): Promise<boolean>;
    closedTasks(userId: number, page?: number): Promise<Task[]>;
    update(id: number, userDelta: Partial<User>): Promise<User>;
    getAllAdminsAndDispatchers(request: KeysetPaginationRequest<null>): Promise<AllUsersKeysetPaginationResponse>;
    getAllDrivers(request: KeysetPaginationRequest<GetAllDriversOptions>): Promise<AllDriversResponse>;
    delete(id: number): Promise<boolean>;
    getProfileImage(userId: number): Promise<string>;
    messageDriver(userId: number, message: string): Promise<number>;
    getDriverCost(userId: number): Promise<unknown>;
    byUserType(userTypeId: number): Promise<User[]>;
    makeAdmin(userId: number): Promise<Admin>;
    fetchAllPages<Cursor, R>(fn: (cursor?: Cursor) => Promise<{
        values: R[];
        hasMore: boolean;
        nextCursor: Cursor;
    }>, options?: {
        signal?: AbortSignal;
    }): Promise<R[]>;
    protected attachSubscriptions(): void;
    generateResetPasswordToken(email: string): Promise<string>;
}
