import { ServiceContainerContext } from "@omnia/fx";
import { AppInstance, AppTemplate, BusinessProfile, Feature, GuidValue } from "@omnia/fx/models";
import { AppDefinition } from "../apps";
import { ApiPath, IExtendApiManifestWithConfiguration } from "../Extends";
export interface IFeatureValidator {
}
export interface ITenantScopedFeatureValidator extends IFeatureValidator {
    checkAvailable: (featureDefinition: Feature) => Promise<boolean>;
}
export interface IProfileScopedFeatureValidator extends IFeatureValidator {
    checkAvailable: (featureDefinition: Feature, profile: BusinessProfile) => Promise<boolean>;
}
export interface IAppScopedFeatureValidator extends IFeatureValidator {
    checkAvailable: (featureDefinition: Feature, appDefinition: AppDefinition, appTemplate: AppTemplate, appInstance?: AppInstance) => Promise<boolean>;
}
export interface IFeatureManagementUsageApi {
    loadValidators: (serviceContainerContext: ServiceContainerContext, featureDefinition: Feature) => Promise<IFeatureValidator[]>;
}
export interface IFeatureManagementRegistrationApi {
    registerValidator: (appDefinitionId: GuidValue, handler: new () => IFeatureValidator) => void;
}
declare module "./UxApi" {
    interface IOmniaUxApi {
        feature: {
            use: Promise<IFeatureManagementUsageApi>;
            registration: Promise<IFeatureManagementRegistrationApi>;
        };
    }
    interface IOmniaUxExtendApiManifest {
        feature: {
            use: ApiPath;
            registration: IExtendApiManifestWithConfiguration<string>;
        };
    }
}
