import { Request, Response } from 'express';
import { Operation } from 'fast-json-patch';
import Controller from '../../controller';
import { IUnleashConfig } from '../../../types/option';
import { IUnleashServices } from '../../../types';
import { IAuthRequest } from '../../unleash-types';
import { CreateFeatureSchema } from '../../../openapi/spec/create-feature-schema';
import { FeatureSchema } from '../../../openapi/spec/feature-schema';
import { FeatureStrategySchema } from '../../../openapi/spec/feature-strategy-schema';
import { ParametersSchema } from '../../../openapi/spec/parameters-schema';
import { FeaturesSchema } from '../../../openapi/spec/features-schema';
import { UpdateFeatureSchema } from '../../../openapi/spec/update-feature-schema';
import { UpdateFeatureStrategySchema } from '../../../openapi/spec/update-feature-strategy-schema';
import { CreateFeatureStrategySchema } from '../../../openapi/spec/create-feature-strategy-schema';
import { FeatureEnvironmentSchema } from '../../../openapi/spec/feature-environment-schema';
import { SetStrategySortOrderSchema } from '../../../openapi/spec/set-strategy-sort-order-schema';
interface FeatureStrategyParams {
    projectId: string;
    featureName: string;
    environment: string;
    sortOrder?: number;
}
interface FeatureParams extends ProjectParam {
    featureName: string;
}
interface ProjectParam {
    projectId: string;
}
interface StrategyIdParams extends FeatureStrategyParams {
    strategyId: string;
}
export interface IFeatureProjectUserParams extends ProjectParam {
    archived?: boolean;
    userId?: number;
}
declare type ProjectFeaturesServices = Pick<IUnleashServices, 'featureToggleServiceV2' | 'projectHealthService' | 'openApiService' | 'segmentService'>;
export default class ProjectFeaturesController extends Controller {
    private featureService;
    private openApiService;
    private segmentService;
    private readonly logger;
    constructor(config: IUnleashConfig, { featureToggleServiceV2, openApiService, segmentService, }: ProjectFeaturesServices);
    getFeatures(req: IAuthRequest<ProjectParam, any, any, any>, res: Response<FeaturesSchema>): Promise<void>;
    cloneFeature(req: IAuthRequest<FeatureParams, any, {
        name: string;
        replaceGroupId?: boolean;
    }>, res: Response<FeatureSchema>): Promise<void>;
    createFeature(req: IAuthRequest<FeatureParams, FeatureSchema, CreateFeatureSchema>, res: Response<FeatureSchema>): Promise<void>;
    getFeature(req: IAuthRequest<FeatureParams, any, any, any>, res: Response): Promise<void>;
    updateFeature(req: IAuthRequest<{
        projectId: string;
        featureName: string;
    }, any, UpdateFeatureSchema>, res: Response<FeatureSchema>): Promise<void>;
    patchFeature(req: IAuthRequest<{
        projectId: string;
        featureName: string;
    }, any, Operation[], any>, res: Response<FeatureSchema>): Promise<void>;
    archiveFeature(req: IAuthRequest<{
        projectId: string;
        featureName: string;
    }, any, any, any>, res: Response<void>): Promise<void>;
    getFeatureEnvironment(req: Request<FeatureStrategyParams, any, any, any>, res: Response<FeatureEnvironmentSchema>): Promise<void>;
    toggleFeatureEnvironmentOn(req: IAuthRequest<FeatureStrategyParams, any, any, any>, res: Response<void>): Promise<void>;
    toggleFeatureEnvironmentOff(req: IAuthRequest<FeatureStrategyParams, any, any, any>, res: Response<void>): Promise<void>;
    addFeatureStrategy(req: IAuthRequest<FeatureStrategyParams, any, CreateFeatureStrategySchema>, res: Response<FeatureStrategySchema>): Promise<void>;
    getFeatureStrategies(req: Request<FeatureStrategyParams, any, any, any>, res: Response<FeatureStrategySchema[]>): Promise<void>;
    setStrategiesSortOrder(req: Request<FeatureStrategyParams, any, SetStrategySortOrderSchema, any>, res: Response): Promise<void>;
    updateFeatureStrategy(req: IAuthRequest<StrategyIdParams, any, UpdateFeatureStrategySchema>, res: Response<FeatureStrategySchema>): Promise<void>;
    patchFeatureStrategy(req: IAuthRequest<StrategyIdParams, any, Operation[], any>, res: Response<FeatureStrategySchema>): Promise<void>;
    getFeatureStrategy(req: IAuthRequest<StrategyIdParams, any, any, any>, res: Response<FeatureStrategySchema>): Promise<void>;
    deleteFeatureStrategy(req: IAuthRequest<StrategyIdParams, any, any, any>, res: Response<void>): Promise<void>;
    updateStrategyParameter(req: IAuthRequest<StrategyIdParams, any, {
        name: string;
        value: string | number;
    }, any>, res: Response<FeatureStrategySchema>): Promise<void>;
    getStrategyParameters(req: Request<StrategyIdParams, any, any, any>, res: Response<ParametersSchema>): Promise<void>;
}
export {};
