import type { User, DatabaseStore, PaginationParams, Response } from '../../typings';
import { Base } from './Base';
export declare class Users extends Base {
    constructor({ db }: {
        db: DatabaseStore;
    });
    create(user: User & {
        directoryId: string;
    }): Promise<Response<User>>;
    /**
     * @openapi
     * components:
     *   schemas:
     *     User:
     *       type: object
     *       properties:
     *         id:
     *           type: string
     *           description: User ID
     *         first_name:
     *           type: string
     *           description: First name
     *         last_name:
     *           type: string
     *           description: Last name
     *         email:
     *           type: string
     *           description: Email address
     *         active:
     *           type: boolean
     *           description: Indicates whether the user is active or not
     *         raw:
     *           type: object
     *           properties: {}
     *           description: Raw user attributes from the Identity Provider
     *
     */
    /**
     * @openapi
     * /api/v1/dsync/users/{userId}:
     *   get:
     *     tags:
     *       - Directory Sync
     *     summary: Get user by id from a directory
     *     parameters:
     *       - name: tenant
     *         in: query
     *         description: Tenant (Optional if directoryId is provided)
     *         schema:
     *           type: string
     *       - name: product
     *         in: query
     *         description: Product (Optional if directoryId is provided)
     *         schema:
     *           type: string
     *       - name: directoryId
     *         in: query
     *         description: Directory ID (Optional if tenant/product is provided)
     *         schema:
     *           type: string
     *       - name: userId
     *         in: path
     *         description: User ID
     *         required: true
     *         schema:
     *           type: string
     *     responses:
     *       200:
     *         description: Success
     *         content:
     *           application/json:
     *             schema:
     *               $ref: "#/components/schemas/User"
     */
    get(id: string): Promise<Response<User>>;
    update(id: string, user: User): Promise<Response<User>>;
    delete(id: string): Promise<Response<null>>;
    search(userName: string, directoryId: string): Promise<Response<User[]>>;
    /**
     * @openapi
     * /api/v1/dsync/users:
     *   get:
     *     tags:
     *       - Directory Sync
     *     summary: Get users from a directory
     *     parameters:
     *       - $ref: '#/components/parameters/tenant'
     *       - $ref: '#/components/parameters/product'
     *       - $ref: '#/components/parameters/directoryId'
     *       - $ref: '#/components/parameters/pageOffset'
     *       - $ref: '#/components/parameters/pageLimit'
     *       - $ref: '#/components/parameters/pageToken'
     *     responses:
     *       200:
     *         description: Success
     *         content:
     *           application/json:
     *              schema:
     *                type: object
     *                properties:
     *                  data:
     *                    type: array
     *                    items:
     *                      $ref: '#/components/schemas/User'
     *                  pageToken:
     *                    type: string
     *                    description: token for pagination
     */
    getAll({ pageOffset, pageLimit, pageToken, directoryId, }?: PaginationParams & {
        directoryId?: string;
    }): Promise<Response<User[]>>;
    deleteAll(directoryId: string): Promise<void>;
}
