import type { IAuditUser, IUser } from '../../types/user.js';
import type { AccessService, AccessWithRoles } from '../../services/access-service.js';
import { type CreateProject, type FeatureToggle, type IProject, type IProjectApplications, type IProjectHealth, type IProjectOverview, type IProjectRoleUsage, type IProjectUpdate, type IUnleashConfig, type IUnleashStores, type ProjectCreated } from '../../types/index.js';
import type { IRoleDescriptor } from '../../types/stores/access-store.js';
import type { FeatureToggleService } from '../feature-toggle/feature-toggle-service.js';
import type { GroupService } from '../../services/group-service.js';
import type { FavoritesService } from '../../services/favorites-service.js';
import type { ProjectDoraMetricsSchema } from '../../openapi/index.js';
import type { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType.js';
import type EventService from '../events/event-service.js';
import type { IProjectApplicationsSearchParams, IProjectEnterpriseSettingsUpdate, IProjectQuery, IProjectsQuery } from './project-store-type.js';
import type { ApiTokenService } from '../../services/index.js';
import type { ProjectForUi } from './project-read-model-type.js';
import type { ResourceLimitsService } from '../resource-limits/resource-limits-service.js';
type Days = number;
type Count = number;
export interface IProjectStats {
    avgTimeToProdCurrentWindow: Days;
    createdCurrentWindow: Count;
    createdPastWindow: Count;
    archivedCurrentWindow: Count;
    archivedPastWindow: Count;
    projectActivityCurrentWindow: Count;
    projectActivityPastWindow: Count;
    projectMembersAddedCurrentWindow: Count;
}
interface ICalculateStatus {
    projectId: string;
    updates: IProjectStats;
}
export default class ProjectService {
    private projectStore;
    private projectOwnersReadModel;
    private projectFlagCreatorsReadModel;
    private accessService;
    private eventStore;
    private featureToggleStore;
    private featureEnvironmentStore;
    private environmentStore;
    private groupService;
    private logger;
    private featureToggleService;
    private privateProjectChecker;
    private accountStore;
    private apiTokenService;
    private favoritesService;
    private eventService;
    private projectStatsStore;
    private flagResolver;
    private isEnterprise;
    private resourceLimitsService;
    private eventBus;
    private projectReadModel;
    private onboardingReadModel;
    private edgeTokenStore;
    private timer;
    constructor({ projectStore, projectOwnersReadModel, projectFlagCreatorsReadModel, eventStore, featureToggleStore, environmentStore, featureEnvironmentStore, accountStore, projectStatsStore, projectReadModel, onboardingReadModel, edgeTokenStore, }: Pick<IUnleashStores, 'projectStore' | 'projectOwnersReadModel' | 'projectFlagCreatorsReadModel' | 'eventStore' | 'featureToggleStore' | 'environmentStore' | 'featureEnvironmentStore' | 'accountStore' | 'projectStatsStore' | 'projectReadModel' | 'onboardingReadModel' | 'edgeTokenStore'>, config: IUnleashConfig, accessService: AccessService, featureToggleService: FeatureToggleService, groupService: GroupService, favoriteService: FavoritesService, eventService: EventService, privateProjectChecker: IPrivateProjectChecker, apiTokenService: ApiTokenService, resourceLimitsService: ResourceLimitsService);
    getProjects(query?: IProjectQuery & IProjectsQuery, userId?: number): Promise<ProjectForUi[]>;
    addOwnersToProjects(projects: ProjectForUi[]): Promise<ProjectForUi[]>;
    getProject(id: string): Promise<IProject>;
    private validateAndProcessFeatureNamingPattern;
    private validateEnvironmentsExist;
    validateProjectEnvironments(environments: string[] | undefined): Promise<void>;
    validateProjectLimit(): Promise<void>;
    generateProjectId(name: string): Promise<string>;
    getAllChangeRequestEnvironments(newProject: CreateProject): Promise<CreateProject['changeRequestEnvironments']>;
    createProject(newProject: CreateProject, user: IUser, auditUser: IAuditUser, enableChangeRequestsForSpecifiedEnvironments?: (environments: CreateProject['changeRequestEnvironments']) => Promise<ProjectCreated['changeRequestEnvironments']>): Promise<ProjectCreated>;
    updateProject(updatedProject: IProjectUpdate, auditUser: IAuditUser): Promise<void>;
    updateProjectEnterpriseSettings(updatedProject: IProjectEnterpriseSettingsUpdate, auditUser: IAuditUser): Promise<void>;
    checkProjectsCompatibility(feature: FeatureToggle, newProjectId: string): Promise<boolean>;
    addEnvironmentToProject(project: string, environment: string): Promise<void>;
    private validateActiveProject;
    changeProject(newProjectId: string, featureName: string, user: IUser, currentProjectId: string, auditUser: IAuditUser): Promise<any>;
    deleteProject(id: string, user: IUser, auditUser: IAuditUser): Promise<void>;
    archiveProject(id: string, auditUser: IAuditUser): Promise<void>;
    reviveProject(id: string, auditUser: IAuditUser): Promise<void>;
    validateId(id: string): Promise<boolean>;
    validateUniqueId(id: string): Promise<void>;
    getAccessToProject(projectId: string): Promise<AccessWithRoles>;
    /**
     * @deprecated use removeUserAccess
     */
    removeUser(projectId: string, roleId: number, userId: number, auditUser: IAuditUser): Promise<void>;
    removeUserAccess(projectId: string, userId: number, auditUser: IAuditUser): Promise<void>;
    removeGroupAccess(projectId: string, groupId: number, auditUser: IAuditUser): Promise<void>;
    addGroup(projectId: string, roleId: number, groupId: number, auditUser: IAuditUser): Promise<void>;
    private isAdmin;
    private isProjectOwner;
    private isAllowedToAddAccess;
    addAccess(projectId: string, roles: number[], groups: number[], users: number[], auditUser: IAuditUser): Promise<void>;
    setRolesForUser(projectId: string, userId: number, newRoles: number[], auditUser: IAuditUser): Promise<void>;
    setRolesForGroup(projectId: string, groupId: number, newRoles: number[], auditUser: IAuditUser): Promise<void>;
    findProjectRole(projectId: string, roleId: number): Promise<IRoleDescriptor>;
    /** @deprecated use projectInsightsService instead */
    getDoraMetrics(projectId: string): Promise<ProjectDoraMetricsSchema>;
    getApplications(searchParams: IProjectApplicationsSearchParams): Promise<IProjectApplications>;
    getProjectFlagCreators(projectId: string): Promise<{
        id: number;
        name: string;
    }[]>;
    changeRole(projectId: string, roleId: number, userId: number, auditUser: IAuditUser): Promise<void>;
    getMembers(projectId: string): Promise<number>;
    getProjectUsers(projectId: string): Promise<Array<Pick<IUser, 'id' | 'email' | 'username'>>>;
    isProjectUser(userId: number, projectId: string): Promise<boolean>;
    getProjectsByUser(userId: number): Promise<string[]>;
    getProjectRoleUsage(roleId: number): Promise<IProjectRoleUsage[]>;
    statusJob(): Promise<void>;
    getStatusUpdates(projectId: string): Promise<ICalculateStatus>;
    getProjectHealth(projectId: string, archived?: boolean, userId?: number): Promise<IProjectHealth>;
    getProjectOverview(projectId: string, archived?: boolean, userId?: number): Promise<IProjectOverview>;
    removePropertiesForNonEnterprise(data: any): any;
}
export {};
//# sourceMappingURL=project-service.d.ts.map