import type { Construct } from 'constructs';
import { CfnDeployment, CfnEnvironment } from './appconfig.generated';
import type { IApplication } from './application';
import type { IConfiguration } from './configuration';
import type { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible } from './extension';
import { ExtensibleBase } from './extension';
import type { DeletionProtectionCheck } from './util';
import * as iam from '../../aws-iam';
import type { IResource } from '../../core';
import { Resource } from '../../core';
import type { IEnvironmentRef, EnvironmentReference } from '../../interfaces/generated/aws-appconfig-interfaces.generated';
import type { IAlarmRef } from '../../interfaces/generated/aws-cloudwatch-interfaces.generated';
/**
 * Attributes of an existing AWS AppConfig environment to import it.
 */
export interface EnvironmentAttributes {
    /**
     * The application associated with the environment.
     */
    readonly application: IApplication;
    /**
     * The ID of the environment.
     */
    readonly environmentId: string;
    /**
     * The name of the environment.
     *
     * @default - None.
     */
    readonly name?: string;
    /**
     * The description of the environment.
     *
     * @default - None.
     */
    readonly description?: string;
    /**
     * The monitors for the environment.
     *
     * @default - None.
     */
    readonly monitors?: Monitor[];
}
declare abstract class EnvironmentBase extends Resource implements IEnvironment, IExtensible {
    abstract applicationId: string;
    abstract environmentId: string;
    abstract environmentArn: string;
    abstract name?: string;
    protected extensible: ExtensibleBase;
    protected deploymentQueue: Array<CfnDeployment>;
    get environmentRef(): EnvironmentReference;
    addDeployment(configuration: IConfiguration): void;
    addDeployments(...configurations: IConfiguration[]): void;
    on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void;
    preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    atDeploymentTick(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    addExtension(extension: IExtension): void;
    /**
     * [disable-awslint:no-grants]
     */
    grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
    /**
     * [disable-awslint:no-grants]
     */
    grantReadConfig(identity: iam.IGrantable): iam.Grant;
}
/**
 * Options for the Environment construct.
 */
export interface EnvironmentOptions {
    /**
     * The name of the environment.
     *
     * @default - A name is generated.
     */
    readonly environmentName?: string;
    /**
     * The description of the environment.
     *
     * @default - No description.
     */
    readonly description?: string;
    /**
     * The monitors for the environment.
     *
     * @default - No monitors.
     */
    readonly monitors?: Monitor[];
    /**
     * A property to prevent accidental deletion of active environments.
     *
     * @default undefined - AppConfig default is ACCOUNT_DEFAULT
     */
    readonly deletionProtectionCheck?: DeletionProtectionCheck;
}
/**
 * Properties for the Environment construct.
 */
export interface EnvironmentProps extends EnvironmentOptions {
    /**
     * The application to be associated with the environment.
     */
    readonly application: IApplication;
}
/**
 * An AWS AppConfig environment.
 * [disable-awslint:no-grants]
 *
 * @resource AWS::AppConfig::Environment
 * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-environment.html
 */
export declare class Environment extends EnvironmentBase {
    /** Uniquely identifies this class. */
    static readonly PROPERTY_INJECTION_ID: string;
    /**
     * Imports an environment into the CDK using its Amazon Resource Name (ARN).
     *
     * @param scope The parent construct
     * @param id The name of the environment construct
     * @param environmentArn The Amazon Resource Name (ARN) of the environment
     */
    static fromEnvironmentArn(scope: Construct, id: string, environmentArn: string): IEnvironment;
    /**
     * Imports an environment into the CDK from its attributes.
     *
     * @param scope The parent construct
     * @param id The name of the environment construct
     * @param attrs The attributes of the environment
     */
    static fromEnvironmentAttributes(scope: Construct, id: string, attrs: EnvironmentAttributes): IEnvironment;
    /**
     * The application associated with the environment.
     */
    readonly application?: IApplication;
    /**
     * The name of the environment.
     */
    readonly name?: string;
    /**
     * The description of the environment.
     */
    readonly description?: string;
    /**
     * The monitors for the environment.
     */
    readonly monitors?: Monitor[];
    /**
     * The ID of the environment.
     *
     * @attribute
     */
    readonly environmentId: string;
    /**
     * The Amazon Resource Name (ARN) of the environment.
     *
     * @attribute
     */
    readonly environmentArn: string;
    /**
     * The ID of the environment.
     */
    readonly applicationId: string;
    private readonly _cfnEnvironment;
    constructor(scope: Construct, id: string, props: EnvironmentProps);
    private createOrGetAlarmRole;
}
/**
 * The type of Monitor.
 */
export declare enum MonitorType {
    /**
     * A Monitor from a CloudWatch alarm.
     */
    CLOUDWATCH = 0,
    /**
     * A Monitor from a CfnEnvironment.MonitorsProperty construct.
     */
    CFN_MONITORS_PROPERTY = 1
}
/**
 * Defines monitors that will be associated with an AWS AppConfig environment.
 */
export declare abstract class Monitor {
    /**
     * Creates a Monitor from a CloudWatch alarm. If the alarm role is not specified, a role will
     * be generated.
     *
     * @param alarm The Amazon CloudWatch alarm.
     * @param alarmRole The IAM role for AWS AppConfig to view the alarm state.
     */
    static fromCloudWatchAlarm(alarm: IAlarmRef, alarmRole?: iam.IRoleRef): Monitor;
    /**
     * Creates a Monitor from a CfnEnvironment.MonitorsProperty construct.
     *
     * @param monitorsProperty The monitors property.
     */
    static fromCfnMonitorsProperty(monitorsProperty: CfnEnvironment.MonitorsProperty): Monitor;
    /**
     * The alarm ARN for AWS AppConfig to monitor.
     */
    abstract readonly alarmArn: string;
    /**
     * The type of monitor.
     */
    abstract readonly monitorType: MonitorType;
    /**
     * The IAM role ARN for AWS AppConfig to view the alarm state.
     */
    abstract readonly alarmRoleArn?: string;
    /**
     * Indicates whether a CloudWatch alarm is a composite alarm.
     */
    abstract readonly isCompositeAlarm?: boolean;
}
export interface IEnvironment extends IResource, IEnvironmentRef {
    /**
     * The application associated with the environment.
     */
    readonly application?: IApplication;
    /**
     * The ID of the application associated to the environment.
     */
    readonly applicationId: string;
    /**
     * The name of the environment.
     */
    readonly name?: string;
    /**
     * The description of the environment.
     */
    readonly description?: string;
    /**
     * The monitors for the environment.
     */
    readonly monitors?: Monitor[];
    /**
     * The ID of the environment.
     * @attribute
     */
    readonly environmentId: string;
    /**
     * The Amazon Resource Name (ARN) of the environment.
     * @attribute
     */
    readonly environmentArn: string;
    /**
     * Creates a deployment of the supplied configuration to this environment.
     * Note that you can only deploy one configuration at a time to an environment.
     * However, you can deploy one configuration each to different environments at the same time.
     * If more than one deployment is requested for this environment, they will occur in the same order they were provided.
     *
     * @param configuration The configuration that will be deployed to this environment.
     */
    addDeployment(configuration: IConfiguration): void;
    /**
     * Creates a deployment for each of the supplied configurations to this environment.
     * These configurations will be deployed in the same order as the input array.
     *
     * @param configurations The configurations that will be deployed to this environment.
     */
    addDeployments(...configurations: Array<IConfiguration>): void;
    /**
     * Adds an extension defined by the action point and event destination and also
     * creates an extension association to the environment.
     *
     * @param actionPoint The action point which triggers the event
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the provided event destination
     * and also creates an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds a PRE_START_DEPLOYMENT extension with the provided event destination and also creates
     * an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_START extension with the provided event destination and also creates
     * an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination and also
     * creates an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and
     * also creates an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination and
     * also creates an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination and
     * also creates an extension association to the environment.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an AT_DEPLOYMENT_TICK extension with the provided event destination and
     * also creates an extension association to an application.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    atDeploymentTick(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an extension association to the environment.
     *
     * @param extension The extension to create an association for
     */
    addExtension(extension: IExtension): void;
    /**
     * Adds an IAM policy statement associated with this environment to an IAM principal's policy.
     *
     * @param grantee the principal (no-op if undefined)
     * @param actions the set of actions to allow (i.e., 'appconfig:GetLatestConfiguration', 'appconfig:StartConfigurationSession', etc.)
     */
    grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
    /**
     * Permits an IAM principal to perform read operations on this environment's configurations.
     *
     * Actions: GetLatestConfiguration, StartConfigurationSession.
     *
     * @param grantee Principal to grant read rights to
     */
    grantReadConfig(grantee: iam.IGrantable): iam.Grant;
}
export {};
