import { User, UserAPI } from "../types/user.types.js";
import { FiltersAndPagination } from "../utils/filtersAndPagination/getFiltersAndPaginationFromBody.js";
import { PaginatedResponse, ResponseData } from "../utils/responseData.js";
import { UserFiltersParam } from "../utils/filtersAndPagination/getUserFiltersAndPagination.js";
import { FastifyReply, FastifyRequest } from "fastify";

//#region src/controllers/user.controller.d.ts
type CreateUserBody = {
  email: string;
  password?: string;
};
type CreateUserResult = ResponseData<UserAPI>;
/**
 * Creates a new user.
 */
declare const createUser: (request: FastifyRequest<{
  Body: User;
}>, reply: FastifyReply) => Promise<void>;
type GetUsersParams = FiltersAndPagination<UserFiltersParam>;
type GetUsersResult = PaginatedResponse<UserAPI>;
/**
 * Retrieves a list of users based on filters and pagination.
 */
declare const getUsers: (request: FastifyRequest<{
  Querystring: GetUsersParams;
}>, reply: FastifyReply) => Promise<void>;
type GetUserByIdParams = {
  userId: UserAPI['id'];
};
type GetUserByIdResult = ResponseData<UserAPI>;
declare const getUserById: (request: FastifyRequest<{
  Params: GetUserByIdParams;
}>, reply: FastifyReply) => Promise<void>;
type GetUserByEmailParams = {
  email: string;
};
type GetUserByEmailResult = ResponseData<UserAPI>;
declare const getUserByEmail: (request: FastifyRequest<{
  Params: GetUserByEmailParams;
}>, reply: FastifyReply) => Promise<void>;
type UpdateUserBody = Partial<UserAPI>;
type UpdateUserResult = ResponseData<UserAPI>;
/**
 * Updates user information (phone number, date of birth).
 */
declare const updateUser: (request: FastifyRequest<{
  Body: UpdateUserBody;
}>, reply: FastifyReply) => Promise<void>;
type DeleteUserParams = {
  userId: string;
};
type DeleteUserResult = ResponseData<UserAPI>;
/**
 * Deletes a user based on the provided ID.
 */
declare const deleteUser: (request: FastifyRequest<{
  Params: DeleteUserParams;
}>, reply: FastifyReply) => Promise<void>;
declare const sendVerificationUpdate: (user: User) => void;
type VerifyEmailStatusSSEParams = {
  userId: string;
};
/**
 * SSE to check the email verification status
 */
declare const verifyEmailStatusSSE: (request: FastifyRequest<{
  Params: VerifyEmailStatusSSEParams;
}>, reply: FastifyReply) => 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