import * as HttpClient from "effect/unstable/http/HttpClient";
import * as S from "effect/Schema";
import * as API from "../client/api.ts";
import type { Credentials } from "../credentials.ts";
import type { CommonErrors } from "../errors.ts";
import type { Region } from "../region.ts";
export type ScalingPlanName = string;
export type XmlString = string;
export type XmlStringMaxLen128 = string;
export type XmlStringMaxLen256 = string;
export type ResourceIdMaxLen1600 = string;
export type ResourceCapacity = number;
export type ResourceLabel = string;
export type MetricName = string;
export type MetricNamespace = string;
export type MetricDimensionName = string;
export type MetricDimensionValue = string;
export type MetricUnit = string;
export type MetricScale = number;
export type DisableScaleIn = boolean;
export type Cooldown = number;
export type ScheduledActionBufferTime = number;
export type DisableDynamicScaling = boolean;
export type ScalingPlanVersion = number;
export type ErrorMessage = string;
export type MaxResults = number;
export type NextToken = string;
export type PolicyName = string;
export type TagValues = string[];
export declare const TagValues: S.$Array<S.String>;
export interface TagFilter {
    Key?: string;
    Values?: string[];
}
export declare const TagFilter: S.Schema<TagFilter>;
export type TagFilters = TagFilter[];
export declare const TagFilters: S.$Array<S.Schema<TagFilter>>;
export interface ApplicationSource {
    CloudFormationStackARN?: string;
    TagFilters?: TagFilter[];
}
export declare const ApplicationSource: S.Schema<ApplicationSource>;
export type ServiceNamespace = "autoscaling" | "ecs" | "ec2" | "rds" | "dynamodb" | (string & {});
export declare const ServiceNamespace: S.String;
export type ScalableDimension = "autoscaling:autoScalingGroup:DesiredCapacity" | "ecs:service:DesiredCount" | "ec2:spot-fleet-request:TargetCapacity" | "rds:cluster:ReadReplicaCount" | "dynamodb:table:ReadCapacityUnits" | "dynamodb:table:WriteCapacityUnits" | "dynamodb:index:ReadCapacityUnits" | "dynamodb:index:WriteCapacityUnits" | (string & {});
export declare const ScalableDimension: S.String;
export type ScalingMetricType = "ASGAverageCPUUtilization" | "ASGAverageNetworkIn" | "ASGAverageNetworkOut" | "DynamoDBReadCapacityUtilization" | "DynamoDBWriteCapacityUtilization" | "ECSServiceAverageCPUUtilization" | "ECSServiceAverageMemoryUtilization" | "ALBRequestCountPerTarget" | "RDSReaderAverageCPUUtilization" | "RDSReaderAverageDatabaseConnections" | "EC2SpotFleetRequestAverageCPUUtilization" | "EC2SpotFleetRequestAverageNetworkIn" | "EC2SpotFleetRequestAverageNetworkOut" | (string & {});
export declare const ScalingMetricType: S.String;
export interface PredefinedScalingMetricSpecification {
    PredefinedScalingMetricType: ScalingMetricType;
    ResourceLabel?: string;
}
export declare const PredefinedScalingMetricSpecification: S.Schema<PredefinedScalingMetricSpecification>;
export interface MetricDimension {
    Name: string;
    Value: string;
}
export declare const MetricDimension: S.Schema<MetricDimension>;
export type MetricDimensions = MetricDimension[];
export declare const MetricDimensions: S.$Array<S.Schema<MetricDimension>>;
export type MetricStatistic = "Average" | "Minimum" | "Maximum" | "SampleCount" | "Sum" | (string & {});
export declare const MetricStatistic: S.String;
export interface CustomizedScalingMetricSpecification {
    MetricName: string;
    Namespace: string;
    Dimensions?: MetricDimension[];
    Statistic: MetricStatistic;
    Unit?: string;
}
export declare const CustomizedScalingMetricSpecification: S.Schema<CustomizedScalingMetricSpecification>;
export interface TargetTrackingConfiguration {
    PredefinedScalingMetricSpecification?: PredefinedScalingMetricSpecification;
    CustomizedScalingMetricSpecification?: CustomizedScalingMetricSpecification;
    TargetValue: number;
    DisableScaleIn?: boolean;
    ScaleOutCooldown?: number;
    ScaleInCooldown?: number;
    EstimatedInstanceWarmup?: number;
}
export declare const TargetTrackingConfiguration: S.Schema<TargetTrackingConfiguration>;
export type TargetTrackingConfigurations = TargetTrackingConfiguration[];
export declare const TargetTrackingConfigurations: S.$Array<S.Schema<TargetTrackingConfiguration>>;
export type LoadMetricType = "ASGTotalCPUUtilization" | "ASGTotalNetworkIn" | "ASGTotalNetworkOut" | "ALBTargetGroupRequestCount" | (string & {});
export declare const LoadMetricType: S.String;
export interface PredefinedLoadMetricSpecification {
    PredefinedLoadMetricType: LoadMetricType;
    ResourceLabel?: string;
}
export declare const PredefinedLoadMetricSpecification: S.Schema<PredefinedLoadMetricSpecification>;
export interface CustomizedLoadMetricSpecification {
    MetricName: string;
    Namespace: string;
    Dimensions?: MetricDimension[];
    Statistic: MetricStatistic;
    Unit?: string;
}
export declare const CustomizedLoadMetricSpecification: S.Schema<CustomizedLoadMetricSpecification>;
export type PredictiveScalingMaxCapacityBehavior = "SetForecastCapacityToMaxCapacity" | "SetMaxCapacityToForecastCapacity" | "SetMaxCapacityAboveForecastCapacity" | (string & {});
export declare const PredictiveScalingMaxCapacityBehavior: S.String;
export type PredictiveScalingMode = "ForecastAndScale" | "ForecastOnly" | (string & {});
export declare const PredictiveScalingMode: S.String;
export type ScalingPolicyUpdateBehavior = "KeepExternalPolicies" | "ReplaceExternalPolicies" | (string & {});
export declare const ScalingPolicyUpdateBehavior: S.String;
export interface ScalingInstruction {
    ServiceNamespace: ServiceNamespace;
    ResourceId: string;
    ScalableDimension: ScalableDimension;
    MinCapacity: number;
    MaxCapacity: number;
    TargetTrackingConfigurations: TargetTrackingConfiguration[];
    PredefinedLoadMetricSpecification?: PredefinedLoadMetricSpecification;
    CustomizedLoadMetricSpecification?: CustomizedLoadMetricSpecification;
    ScheduledActionBufferTime?: number;
    PredictiveScalingMaxCapacityBehavior?: PredictiveScalingMaxCapacityBehavior;
    PredictiveScalingMaxCapacityBuffer?: number;
    PredictiveScalingMode?: PredictiveScalingMode;
    ScalingPolicyUpdateBehavior?: ScalingPolicyUpdateBehavior;
    DisableDynamicScaling?: boolean;
}
export declare const ScalingInstruction: S.Schema<ScalingInstruction>;
export type ScalingInstructions = ScalingInstruction[];
export declare const ScalingInstructions: S.$Array<S.Schema<ScalingInstruction>>;
export interface CreateScalingPlanRequest {
    ScalingPlanName: string;
    ApplicationSource: ApplicationSource;
    ScalingInstructions: ScalingInstruction[];
}
export declare const CreateScalingPlanRequest: S.Schema<CreateScalingPlanRequest>;
export interface CreateScalingPlanResponse {
    ScalingPlanVersion: number;
}
export declare const CreateScalingPlanResponse: S.Schema<CreateScalingPlanResponse>;
export interface DeleteScalingPlanRequest {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
}
export declare const DeleteScalingPlanRequest: S.Schema<DeleteScalingPlanRequest>;
export interface DeleteScalingPlanResponse {
}
export declare const DeleteScalingPlanResponse: S.Schema<DeleteScalingPlanResponse>;
export interface DescribeScalingPlanResourcesRequest {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
    MaxResults?: number;
    NextToken?: string;
}
export declare const DescribeScalingPlanResourcesRequest: S.Schema<DescribeScalingPlanResourcesRequest>;
export type PolicyType = "TargetTrackingScaling" | (string & {});
export declare const PolicyType: S.String;
export interface ScalingPolicy {
    PolicyName: string;
    PolicyType: PolicyType;
    TargetTrackingConfiguration?: TargetTrackingConfiguration;
}
export declare const ScalingPolicy: S.Schema<ScalingPolicy>;
export type ScalingPolicies = ScalingPolicy[];
export declare const ScalingPolicies: S.$Array<S.Schema<ScalingPolicy>>;
export type ScalingStatusCode = "Inactive" | "PartiallyActive" | "Active" | (string & {});
export declare const ScalingStatusCode: S.String;
export interface ScalingPlanResource {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
    ServiceNamespace: ServiceNamespace;
    ResourceId: string;
    ScalableDimension: ScalableDimension;
    ScalingPolicies?: ScalingPolicy[];
    ScalingStatusCode: ScalingStatusCode;
    ScalingStatusMessage?: string;
}
export declare const ScalingPlanResource: S.Schema<ScalingPlanResource>;
export type ScalingPlanResources = ScalingPlanResource[];
export declare const ScalingPlanResources: S.$Array<S.Schema<ScalingPlanResource>>;
export interface DescribeScalingPlanResourcesResponse {
    ScalingPlanResources?: ScalingPlanResource[];
    NextToken?: string;
}
export declare const DescribeScalingPlanResourcesResponse: S.Schema<DescribeScalingPlanResourcesResponse>;
export type ScalingPlanNames = string[];
export declare const ScalingPlanNames: S.$Array<S.String>;
export type ApplicationSources = ApplicationSource[];
export declare const ApplicationSources: S.$Array<S.Schema<ApplicationSource>>;
export interface DescribeScalingPlansRequest {
    ScalingPlanNames?: string[];
    ScalingPlanVersion?: number;
    ApplicationSources?: ApplicationSource[];
    MaxResults?: number;
    NextToken?: string;
}
export declare const DescribeScalingPlansRequest: S.Schema<DescribeScalingPlansRequest>;
export type ScalingPlanStatusCode = "Active" | "ActiveWithProblems" | "CreationInProgress" | "CreationFailed" | "DeletionInProgress" | "DeletionFailed" | "UpdateInProgress" | "UpdateFailed" | (string & {});
export declare const ScalingPlanStatusCode: S.String;
export interface ScalingPlan {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
    ApplicationSource: ApplicationSource;
    ScalingInstructions: ScalingInstruction[];
    StatusCode: ScalingPlanStatusCode;
    StatusMessage?: string;
    StatusStartTime?: Date;
    CreationTime?: Date;
}
export declare const ScalingPlan: S.Schema<ScalingPlan>;
export type ScalingPlans = ScalingPlan[];
export declare const ScalingPlans: S.$Array<S.Schema<ScalingPlan>>;
export interface DescribeScalingPlansResponse {
    ScalingPlans?: ScalingPlan[];
    NextToken?: string;
}
export declare const DescribeScalingPlansResponse: S.Schema<DescribeScalingPlansResponse>;
export type ForecastDataType = "CapacityForecast" | "LoadForecast" | "ScheduledActionMinCapacity" | "ScheduledActionMaxCapacity" | (string & {});
export declare const ForecastDataType: S.String;
export interface GetScalingPlanResourceForecastDataRequest {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
    ServiceNamespace: ServiceNamespace;
    ResourceId: string;
    ScalableDimension: ScalableDimension;
    ForecastDataType: ForecastDataType;
    StartTime: Date;
    EndTime: Date;
}
export declare const GetScalingPlanResourceForecastDataRequest: S.Schema<GetScalingPlanResourceForecastDataRequest>;
export interface Datapoint {
    Timestamp?: Date;
    Value?: number;
}
export declare const Datapoint: S.Schema<Datapoint>;
export type Datapoints = Datapoint[];
export declare const Datapoints: S.$Array<S.Schema<Datapoint>>;
export interface GetScalingPlanResourceForecastDataResponse {
    Datapoints: Datapoint[];
}
export declare const GetScalingPlanResourceForecastDataResponse: S.Schema<GetScalingPlanResourceForecastDataResponse>;
export interface UpdateScalingPlanRequest {
    ScalingPlanName: string;
    ScalingPlanVersion: number;
    ApplicationSource?: ApplicationSource;
    ScalingInstructions?: ScalingInstruction[];
}
export declare const UpdateScalingPlanRequest: S.Schema<UpdateScalingPlanRequest>;
export interface UpdateScalingPlanResponse {
}
export declare const UpdateScalingPlanResponse: S.Schema<UpdateScalingPlanResponse>;
declare const ConcurrentUpdateException_base: S.Class<ConcurrentUpdateException, S.TaggedStruct<"ConcurrentUpdateException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        ServerError: true;
    };
});
export declare class ConcurrentUpdateException extends ConcurrentUpdateException_base {
}
declare const InternalServiceException_base: S.Class<InternalServiceException, S.TaggedStruct<"InternalServiceException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        ServerError: true;
    };
});
export declare class InternalServiceException extends InternalServiceException_base {
}
declare const LimitExceededException_base: S.Class<LimitExceededException, S.TaggedStruct<"LimitExceededException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        BadRequestError: true;
    };
});
export declare class LimitExceededException extends LimitExceededException_base {
}
declare const ValidationException_base: S.Class<ValidationException, S.TaggedStruct<"ValidationException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        BadRequestError: true;
    };
});
export declare class ValidationException extends ValidationException_base {
}
declare const ObjectNotFoundException_base: S.Class<ObjectNotFoundException, S.TaggedStruct<"ObjectNotFoundException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        BadRequestError: true;
    };
});
export declare class ObjectNotFoundException extends ObjectNotFoundException_base {
}
declare const InvalidNextTokenException_base: S.Class<InvalidNextTokenException, S.TaggedStruct<"InvalidNextTokenException", {
    readonly Message: S.optional<S.String>;
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
    "@distilled.cloud/error/categories": {
        BadRequestError: true;
    };
});
export declare class InvalidNextTokenException extends InvalidNextTokenException_base {
}
export type CreateScalingPlanError = ConcurrentUpdateException | InternalServiceException | LimitExceededException | ValidationException | CommonErrors;
/**
 * Creates a scaling plan.
 */
export declare const createScalingPlan: API.OperationMethod<CreateScalingPlanRequest, CreateScalingPlanResponse, CreateScalingPlanError, Credentials | Region | HttpClient.HttpClient>;
export type DeleteScalingPlanError = ConcurrentUpdateException | InternalServiceException | ObjectNotFoundException | ValidationException | CommonErrors;
/**
 * Deletes the specified scaling plan.
 *
 * Deleting a scaling plan deletes the underlying ScalingInstruction for
 * all of the scalable resources that are covered by the plan.
 *
 * If the plan has launched resources or has scaling activities in progress, you must
 * delete those resources separately.
 */
export declare const deleteScalingPlan: API.OperationMethod<DeleteScalingPlanRequest, DeleteScalingPlanResponse, DeleteScalingPlanError, Credentials | Region | HttpClient.HttpClient>;
export type DescribeScalingPlanResourcesError = ConcurrentUpdateException | InternalServiceException | InvalidNextTokenException | ValidationException | CommonErrors;
/**
 * Describes the scalable resources in the specified scaling plan.
 */
export declare const describeScalingPlanResources: API.OperationMethod<DescribeScalingPlanResourcesRequest, DescribeScalingPlanResourcesResponse, DescribeScalingPlanResourcesError, Credentials | Region | HttpClient.HttpClient>;
export type DescribeScalingPlansError = ConcurrentUpdateException | InternalServiceException | InvalidNextTokenException | ValidationException | CommonErrors;
/**
 * Describes one or more of your scaling plans.
 */
export declare const describeScalingPlans: API.OperationMethod<DescribeScalingPlansRequest, DescribeScalingPlansResponse, DescribeScalingPlansError, Credentials | Region | HttpClient.HttpClient>;
export type GetScalingPlanResourceForecastDataError = InternalServiceException | ValidationException | CommonErrors;
/**
 * Retrieves the forecast data for a scalable resource.
 *
 * Capacity forecasts are represented as predicted values, or data points, that are
 * calculated using historical data points from a specified CloudWatch load metric. Data points are
 * available for up to 56 days.
 */
export declare const getScalingPlanResourceForecastData: API.OperationMethod<GetScalingPlanResourceForecastDataRequest, GetScalingPlanResourceForecastDataResponse, GetScalingPlanResourceForecastDataError, Credentials | Region | HttpClient.HttpClient>;
export type UpdateScalingPlanError = ConcurrentUpdateException | InternalServiceException | ObjectNotFoundException | ValidationException | CommonErrors;
/**
 * Updates the specified scaling plan.
 *
 * You cannot update a scaling plan if it is in the process of being created, updated, or
 * deleted.
 */
export declare const updateScalingPlan: API.OperationMethod<UpdateScalingPlanRequest, UpdateScalingPlanResponse, UpdateScalingPlanError, Credentials | Region | HttpClient.HttpClient>;
export {};
//# sourceMappingURL=auto-scaling-plans.d.ts.map