import { Plan } from "../types/plan.types.js";
import { Organization, OrganizationAPI, OrganizationCreationData, OrganizationDocument } from "../types/organization.types.js";
import { OrganizationFilters } from "../utils/filtersAndPagination/getOrganizationFiltersAndPagination.js";
import { Types } from "mongoose";

//#region src/services/organization.service.d.ts

/**
 * Finds organizations based on filters and pagination options.
 * @param filters - MongoDB filter query.
 * @param skip - Number of documents to skip.
 * @param limit - Number of documents to limit.
 * @returns List of organizations matching the filters.
 */
declare const findOrganizations: (filters: OrganizationFilters, skip: number, limit: number, sortOptions?: Record<string, 1 | -1>) => Promise<OrganizationDocument[]>;
/**
 * Finds an organization by its ID.
 * @param organizationId - The ID of the organization to find.
 * @returns The organization matching the ID.
 */
declare const getOrganizationById: (organizationId: string | Types.ObjectId) => Promise<OrganizationDocument>;
/**
 * Counts the total number of organizations that match the filters.
 * @param filters - MongoDB filter query.
 * @returns Total number of organizations.
 */
declare const countOrganizations: (filters: OrganizationFilters) => Promise<number>;
/**
 * Creates a new organization in the database.
 * @param organization - The organization data to create.
 * @returns The created organization.
 */
declare const createOrganization: (organization: OrganizationCreationData, userId: string | Types.ObjectId) => Promise<OrganizationDocument>;
/**
 * Updates an existing organization in the database by its ID.
 * @param organizationId - The ID of the organization to update.
 * @param organization - The updated organization data.
 * @returns The updated organization.
 */
declare const updateOrganizationById: (organizationId: string | Types.ObjectId, organization: Partial<Organization | OrganizationAPI>) => Promise<OrganizationDocument>;
/**
 * Deletes an organization from the database by its ID.
 * @param organizationId - The ID of the organization to delete.
 * @returns The result of the deletion operation.
 */
declare const deleteOrganizationById: (organizationId: string | Types.ObjectId) => Promise<OrganizationDocument>;
/**
 * Updates an existing plan in the database by its ID.
 * @param planId - The ID of the plan to update.
 * @param plan - The updated plan data.
 * @returns The updated plan.
 */
declare const updatePlan: (organization: Organization | OrganizationDocument, plan: Partial<Plan>) => Promise<OrganizationDocument | null>;
//#endregion
export { countOrganizations, createOrganization, deleteOrganizationById, findOrganizations, getOrganizationById, updateOrganizationById, updatePlan };
//# sourceMappingURL=organization.service.d.ts.map