import { ProjectAPI, ProjectConfiguration, ProjectCreationData } from "../types/project.types.js";
import { ResponseWithSession } from "../middlewares/sessionAuth.middleware.js";
import { FiltersAndPagination } from "../utils/filtersAndPagination/getFiltersAndPaginationFromBody.js";
import { PaginatedResponse, ResponseData } from "../utils/responseData.js";
import { ProjectFiltersParams } from "../utils/filtersAndPagination/getProjectFiltersAndPagination.js";
import { Types } from "mongoose";
import { NextFunction, Request } from "express";

//#region src/controllers/project.controller.d.ts
type GetProjectsParams = FiltersAndPagination<ProjectFiltersParams>;
type GetProjectsResult = PaginatedResponse<ProjectAPI>;
/**
 * Retrieves a list of projects based on filters and pagination.
 */
declare const getProjects: (req: Request<GetProjectsParams>, res: ResponseWithSession<GetProjectsResult>, _next: NextFunction) => Promise<void>;
type AddProjectBody = ProjectCreationData;
type AddProjectResult = ResponseData<ProjectAPI>;
/**
 * Adds a new project to the database.
 */
declare const addProject: (req: Request<any, any, AddProjectBody>, res: ResponseWithSession<AddProjectResult>, _next: NextFunction) => Promise<void>;
type UpdateProjectBody = Partial<ProjectAPI>;
type UpdateProjectResult = ResponseData<ProjectAPI>;
/**
 * Updates an existing project in the database.
 */
declare const updateProject: (req: Request<any, any, UpdateProjectBody>, res: ResponseWithSession<UpdateProjectResult>, _next: NextFunction) => Promise<void>;
type ProjectMemberByIdOption = {
  userId: string | Types.ObjectId;
  isAdmin?: boolean;
};
type UpdateProjectMembersBody = Partial<{
  membersIds: ProjectMemberByIdOption[];
}>;
type UpdateProjectMembersResult = ResponseData<ProjectAPI>;
/**
 * Update members to the dictionary in the database.
 */
declare const updateProjectMembers: (req: Request<any, any, UpdateProjectMembersBody>, res: ResponseWithSession<UpdateProjectMembersResult>, _next: NextFunction) => Promise<void>;
type PushProjectConfigurationBody = ProjectConfiguration;
type PushProjectConfigurationResult = ResponseData<ProjectConfiguration>;
/**
 * Pushes a project configuration to the database.
 * @param req - Express request object.
 * @param  res - Express response object.
 * @returns Response confirming the deletion.
 */
declare const pushProjectConfiguration: (req: Request<any, any, PushProjectConfigurationBody>, res: ResponseWithSession<PushProjectConfigurationResult>, _next: NextFunction) => Promise<void>;
type DeleteProjectResult = ResponseData<ProjectAPI>;
/**
 * Deletes a project from the database by its ID.
 * @param req - Express request object.
 * @param  res - Express response object.
 * @returns Response confirming the deletion.
 */
declare const deleteProject: (_req: Request, res: ResponseWithSession<DeleteProjectResult>, _next: NextFunction) => Promise<void>;
type SelectProjectParam = {
  projectId: string | Types.ObjectId;
};
type SelectProjectResult = ResponseData<ProjectAPI>;
/**
 * Select a project.
 */
declare const selectProject: (req: Request<SelectProjectParam>, res: ResponseWithSession<SelectProjectResult>, _next: NextFunction) => Promise<void>;
type UnselectProjectResult = ResponseData<null>;
/**
 * Unselect a project.
 */
declare const unselectProject: (_req: Request, res: ResponseWithSession<UnselectProjectResult>, _next: NextFunction) => Promise<void>;
//#endregion
export { AddProjectBody, AddProjectResult, DeleteProjectResult, GetProjectsParams, GetProjectsResult, ProjectMemberByIdOption, PushProjectConfigurationBody, PushProjectConfigurationResult, SelectProjectParam, SelectProjectResult, UnselectProjectResult, UpdateProjectBody, UpdateProjectMembersBody, UpdateProjectMembersResult, UpdateProjectResult, addProject, deleteProject, getProjects, pushProjectConfiguration, selectProject, unselectProject, updateProject, updateProjectMembers };
//# sourceMappingURL=project.controller.d.ts.map