import { User, UserAPI } from "../types/user.types.js";
import { ResponseWithSession } from "../middlewares/sessionAuth.middleware.js";
import { FiltersAndPagination } from "../utils/filtersAndPagination/getFiltersAndPaginationFromBody.js";
import { PaginatedResponse, ResponseData } from "../utils/responseData.js";
import { UserFiltersParam } from "../utils/filtersAndPagination/getUserFiltersAndPagination.js";
import { NextFunction, Request } from "express";

//#region src/controllers/user.controller.d.ts
type CreateUserBody = {
  email: string;
  password?: string;
};
type CreateUserResult = ResponseData<UserAPI>;
/**
 * Creates a new user.
 */
declare const createUser: (req: Request<any, any, User>, res: ResponseWithSession<CreateUserResult>, _next: NextFunction) => Promise<void>;
type GetUsersParams = FiltersAndPagination<UserFiltersParam>;
type GetUsersResult = PaginatedResponse<UserAPI>;
/**
 * Retrieves a list of users based on filters and pagination.
 */
declare const getUsers: (req: Request<GetUsersParams>, res: ResponseWithSession<GetUsersResult>, _next: NextFunction) => Promise<void>;
type GetUserByIdParams = {
  userId: UserAPI['id'];
};
type GetUserByIdResult = ResponseData<UserAPI>;
declare const getUserById: (req: Request<GetUserByIdParams>, res: ResponseWithSession<GetUserByIdResult>, _next: NextFunction) => Promise<void>;
type GetUserByEmailParams = {
  email: string;
};
type GetUserByEmailResult = ResponseData<UserAPI>;
declare const getUserByEmail: (req: Request<GetUserByEmailParams>, res: ResponseWithSession<GetUserByEmailResult>, _next: NextFunction) => Promise<void>;
type UpdateUserBody = Partial<UserAPI>;
type UpdateUserResult = ResponseData<UserAPI>;
/**
 * Updates user information (phone number, date of birth).
 */
declare const updateUser: (req: Request<any, any, UpdateUserBody | undefined>, res: ResponseWithSession<UpdateUserResult>, _next: NextFunction) => Promise<void>;
type DeleteUserParams = {
  userId: string;
};
type DeleteUserResult = ResponseData<UserAPI>;
/**
 * Deletes a user based on the provided ID.
 */
declare const deleteUser: (req: Request<DeleteUserParams>, res: ResponseWithSession<DeleteUserResult>, _next: NextFunction) => Promise<void>;
declare const sendVerificationUpdate: (user: User) => void;
type VerifyEmailStatusSSEParams = {
  userId: string;
};
/**
 * SSE to check the email verification status
 */
declare const verifyEmailStatusSSE: (req: Request<VerifyEmailStatusSSEParams, any, any>, res: ResponseWithSession) => Promise<void>;
//#endregion
export { CreateUserBody, CreateUserResult, DeleteUserParams, DeleteUserResult, GetUserByEmailParams, GetUserByEmailResult, GetUserByIdParams, GetUserByIdResult, GetUsersParams, GetUsersResult, UpdateUserBody, UpdateUserResult, VerifyEmailStatusSSEParams, createUser, deleteUser, getUserByEmail, getUserById, getUsers, sendVerificationUpdate, updateUser, verifyEmailStatusSSE };
//# sourceMappingURL=user.controller.d.ts.map