// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function spotFleetRequestLaunchSpecificationEbsBlockDeviceToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        delete_on_termination: cdktf.booleanToTerraform(struct.deleteOnTermination),
        device_name: cdktf.stringToTerraform(struct.deviceName),
        encrypted: cdktf.booleanToTerraform(struct.encrypted),
        iops: cdktf.numberToTerraform(struct.iops),
        kms_key_id: cdktf.stringToTerraform(struct.kmsKeyId),
        snapshot_id: cdktf.stringToTerraform(struct.snapshotId),
        throughput: cdktf.numberToTerraform(struct.throughput),
        volume_size: cdktf.numberToTerraform(struct.volumeSize),
        volume_type: cdktf.stringToTerraform(struct.volumeType),
    };
}
export function spotFleetRequestLaunchSpecificationEphemeralBlockDeviceToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        device_name: cdktf.stringToTerraform(struct.deviceName),
        virtual_name: cdktf.stringToTerraform(struct.virtualName),
    };
}
export function spotFleetRequestLaunchSpecificationRootBlockDeviceToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        delete_on_termination: cdktf.booleanToTerraform(struct.deleteOnTermination),
        encrypted: cdktf.booleanToTerraform(struct.encrypted),
        iops: cdktf.numberToTerraform(struct.iops),
        kms_key_id: cdktf.stringToTerraform(struct.kmsKeyId),
        throughput: cdktf.numberToTerraform(struct.throughput),
        volume_size: cdktf.numberToTerraform(struct.volumeSize),
        volume_type: cdktf.stringToTerraform(struct.volumeType),
    };
}
export function spotFleetRequestLaunchSpecificationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        ami: cdktf.stringToTerraform(struct.ami),
        associate_public_ip_address: cdktf.booleanToTerraform(struct.associatePublicIpAddress),
        availability_zone: cdktf.stringToTerraform(struct.availabilityZone),
        ebs_optimized: cdktf.booleanToTerraform(struct.ebsOptimized),
        iam_instance_profile: cdktf.stringToTerraform(struct.iamInstanceProfile),
        iam_instance_profile_arn: cdktf.stringToTerraform(struct.iamInstanceProfileArn),
        instance_type: cdktf.stringToTerraform(struct.instanceType),
        key_name: cdktf.stringToTerraform(struct.keyName),
        monitoring: cdktf.booleanToTerraform(struct.monitoring),
        placement_group: cdktf.stringToTerraform(struct.placementGroup),
        placement_tenancy: cdktf.stringToTerraform(struct.placementTenancy),
        spot_price: cdktf.stringToTerraform(struct.spotPrice),
        subnet_id: cdktf.stringToTerraform(struct.subnetId),
        tags: cdktf.hashMapper(cdktf.stringToTerraform)(struct.tags),
        user_data: cdktf.stringToTerraform(struct.userData),
        vpc_security_group_ids: cdktf.listMapper(cdktf.stringToTerraform)(struct.vpcSecurityGroupIds),
        weighted_capacity: cdktf.stringToTerraform(struct.weightedCapacity),
        ebs_block_device: cdktf.listMapper(spotFleetRequestLaunchSpecificationEbsBlockDeviceToTerraform)(struct.ebsBlockDevice),
        ephemeral_block_device: cdktf.listMapper(spotFleetRequestLaunchSpecificationEphemeralBlockDeviceToTerraform)(struct.ephemeralBlockDevice),
        root_block_device: cdktf.listMapper(spotFleetRequestLaunchSpecificationRootBlockDeviceToTerraform)(struct.rootBlockDevice),
    };
}
export function spotFleetRequestLaunchTemplateConfigLaunchTemplateSpecificationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        id: cdktf.stringToTerraform(struct.id),
        name: cdktf.stringToTerraform(struct.name),
        version: cdktf.stringToTerraform(struct.version),
    };
}
export class SpotFleetRequestLaunchTemplateConfigLaunchTemplateSpecificationOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._id !== undefined) {
            hasAnyValues = true;
            internalValueResult.id = this._id;
        }
        if (this._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        if (this._version !== undefined) {
            hasAnyValues = true;
            internalValueResult.version = this._version;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._id = undefined;
            this._name = undefined;
            this._version = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._id = value.id;
            this._name = value.name;
            this._version = value.version;
        }
    }
    // id - computed: false, optional: true, required: false
    _id;
    get id() {
        return this.getStringAttribute('id');
    }
    set id(value) {
        this._id = value;
    }
    resetId() {
        this._id = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get idInput() {
        return this._id;
    }
    // name - computed: false, optional: true, required: false
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    resetName() {
        this._name = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // version - computed: false, optional: true, required: false
    _version;
    get version() {
        return this.getStringAttribute('version');
    }
    set version(value) {
        this._version = value;
    }
    resetVersion() {
        this._version = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get versionInput() {
        return this._version;
    }
}
export function spotFleetRequestLaunchTemplateConfigOverridesToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        availability_zone: cdktf.stringToTerraform(struct.availabilityZone),
        instance_type: cdktf.stringToTerraform(struct.instanceType),
        priority: cdktf.numberToTerraform(struct.priority),
        spot_price: cdktf.stringToTerraform(struct.spotPrice),
        subnet_id: cdktf.stringToTerraform(struct.subnetId),
        weighted_capacity: cdktf.numberToTerraform(struct.weightedCapacity),
    };
}
export function spotFleetRequestLaunchTemplateConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        launch_template_specification: spotFleetRequestLaunchTemplateConfigLaunchTemplateSpecificationToTerraform(struct.launchTemplateSpecification),
        overrides: cdktf.listMapper(spotFleetRequestLaunchTemplateConfigOverridesToTerraform)(struct.overrides),
    };
}
export function spotFleetRequestSpotMaintenanceStrategiesCapacityRebalanceToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        replacement_strategy: cdktf.stringToTerraform(struct.replacementStrategy),
    };
}
export class SpotFleetRequestSpotMaintenanceStrategiesCapacityRebalanceOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._replacementStrategy !== undefined) {
            hasAnyValues = true;
            internalValueResult.replacementStrategy = this._replacementStrategy;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._replacementStrategy = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._replacementStrategy = value.replacementStrategy;
        }
    }
    // replacement_strategy - computed: false, optional: true, required: false
    _replacementStrategy;
    get replacementStrategy() {
        return this.getStringAttribute('replacement_strategy');
    }
    set replacementStrategy(value) {
        this._replacementStrategy = value;
    }
    resetReplacementStrategy() {
        this._replacementStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get replacementStrategyInput() {
        return this._replacementStrategy;
    }
}
export function spotFleetRequestSpotMaintenanceStrategiesToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        capacity_rebalance: spotFleetRequestSpotMaintenanceStrategiesCapacityRebalanceToTerraform(struct.capacityRebalance),
    };
}
export class SpotFleetRequestSpotMaintenanceStrategiesOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._capacityRebalance?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.capacityRebalance = this._capacityRebalance?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._capacityRebalance.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._capacityRebalance.internalValue = value.capacityRebalance;
        }
    }
    // capacity_rebalance - computed: false, optional: true, required: false
    _capacityRebalance = new SpotFleetRequestSpotMaintenanceStrategiesCapacityRebalanceOutputReference(this, "capacity_rebalance", true);
    get capacityRebalance() {
        return this._capacityRebalance;
    }
    putCapacityRebalance(value) {
        this._capacityRebalance.internalValue = value;
    }
    resetCapacityRebalance() {
        this._capacityRebalance.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get capacityRebalanceInput() {
        return this._capacityRebalance.internalValue;
    }
}
export function spotFleetRequestTimeoutsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        create: cdktf.stringToTerraform(struct.create),
        delete: cdktf.stringToTerraform(struct.delete),
    };
}
export class SpotFleetRequestTimeoutsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._create !== undefined) {
            hasAnyValues = true;
            internalValueResult.create = this._create;
        }
        if (this._delete !== undefined) {
            hasAnyValues = true;
            internalValueResult.delete = this._delete;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._create = undefined;
            this._delete = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._create = value.create;
            this._delete = value.delete;
        }
    }
    // create - computed: false, optional: true, required: false
    _create;
    get create() {
        return this.getStringAttribute('create');
    }
    set create(value) {
        this._create = value;
    }
    resetCreate() {
        this._create = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get createInput() {
        return this._create;
    }
    // delete - computed: false, optional: true, required: false
    _delete;
    get delete() {
        return this.getStringAttribute('delete');
    }
    set delete(value) {
        this._delete = value;
    }
    resetDelete() {
        this._delete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteInput() {
        return this._delete;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/spot_fleet_request aws_spot_fleet_request}
*/
export class SpotFleetRequest extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_spot_fleet_request";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/spot_fleet_request aws_spot_fleet_request} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options SpotFleetRequestConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_spot_fleet_request',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._allocationStrategy = config.allocationStrategy;
        this._excessCapacityTerminationPolicy = config.excessCapacityTerminationPolicy;
        this._fleetType = config.fleetType;
        this._iamFleetRole = config.iamFleetRole;
        this._instanceInterruptionBehaviour = config.instanceInterruptionBehaviour;
        this._instancePoolsToUseCount = config.instancePoolsToUseCount;
        this._loadBalancers = config.loadBalancers;
        this._onDemandAllocationStrategy = config.onDemandAllocationStrategy;
        this._onDemandMaxTotalPrice = config.onDemandMaxTotalPrice;
        this._onDemandTargetCapacity = config.onDemandTargetCapacity;
        this._replaceUnhealthyInstances = config.replaceUnhealthyInstances;
        this._spotPrice = config.spotPrice;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._targetCapacity = config.targetCapacity;
        this._targetGroupArns = config.targetGroupArns;
        this._terminateInstancesWithExpiration = config.terminateInstancesWithExpiration;
        this._validFrom = config.validFrom;
        this._validUntil = config.validUntil;
        this._waitForFulfillment = config.waitForFulfillment;
        this._launchSpecification = config.launchSpecification;
        this._launchTemplateConfig = config.launchTemplateConfig;
        this._spotMaintenanceStrategies.internalValue = config.spotMaintenanceStrategies;
        this._timeouts.internalValue = config.timeouts;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // allocation_strategy - computed: false, optional: true, required: false
    _allocationStrategy;
    get allocationStrategy() {
        return this.getStringAttribute('allocation_strategy');
    }
    set allocationStrategy(value) {
        this._allocationStrategy = value;
    }
    resetAllocationStrategy() {
        this._allocationStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get allocationStrategyInput() {
        return this._allocationStrategy;
    }
    // client_token - computed: true, optional: false, required: false
    get clientToken() {
        return this.getStringAttribute('client_token');
    }
    // excess_capacity_termination_policy - computed: false, optional: true, required: false
    _excessCapacityTerminationPolicy;
    get excessCapacityTerminationPolicy() {
        return this.getStringAttribute('excess_capacity_termination_policy');
    }
    set excessCapacityTerminationPolicy(value) {
        this._excessCapacityTerminationPolicy = value;
    }
    resetExcessCapacityTerminationPolicy() {
        this._excessCapacityTerminationPolicy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get excessCapacityTerminationPolicyInput() {
        return this._excessCapacityTerminationPolicy;
    }
    // fleet_type - computed: false, optional: true, required: false
    _fleetType;
    get fleetType() {
        return this.getStringAttribute('fleet_type');
    }
    set fleetType(value) {
        this._fleetType = value;
    }
    resetFleetType() {
        this._fleetType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get fleetTypeInput() {
        return this._fleetType;
    }
    // iam_fleet_role - computed: false, optional: false, required: true
    _iamFleetRole;
    get iamFleetRole() {
        return this.getStringAttribute('iam_fleet_role');
    }
    set iamFleetRole(value) {
        this._iamFleetRole = value;
    }
    // Temporarily expose input value. Use with caution.
    get iamFleetRoleInput() {
        return this._iamFleetRole;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // instance_interruption_behaviour - computed: false, optional: true, required: false
    _instanceInterruptionBehaviour;
    get instanceInterruptionBehaviour() {
        return this.getStringAttribute('instance_interruption_behaviour');
    }
    set instanceInterruptionBehaviour(value) {
        this._instanceInterruptionBehaviour = value;
    }
    resetInstanceInterruptionBehaviour() {
        this._instanceInterruptionBehaviour = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instanceInterruptionBehaviourInput() {
        return this._instanceInterruptionBehaviour;
    }
    // instance_pools_to_use_count - computed: false, optional: true, required: false
    _instancePoolsToUseCount;
    get instancePoolsToUseCount() {
        return this.getNumberAttribute('instance_pools_to_use_count');
    }
    set instancePoolsToUseCount(value) {
        this._instancePoolsToUseCount = value;
    }
    resetInstancePoolsToUseCount() {
        this._instancePoolsToUseCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instancePoolsToUseCountInput() {
        return this._instancePoolsToUseCount;
    }
    // load_balancers - computed: true, optional: true, required: false
    _loadBalancers;
    get loadBalancers() {
        return cdktf.Fn.tolist(this.getListAttribute('load_balancers'));
    }
    set loadBalancers(value) {
        this._loadBalancers = value;
    }
    resetLoadBalancers() {
        this._loadBalancers = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get loadBalancersInput() {
        return this._loadBalancers;
    }
    // on_demand_allocation_strategy - computed: false, optional: true, required: false
    _onDemandAllocationStrategy;
    get onDemandAllocationStrategy() {
        return this.getStringAttribute('on_demand_allocation_strategy');
    }
    set onDemandAllocationStrategy(value) {
        this._onDemandAllocationStrategy = value;
    }
    resetOnDemandAllocationStrategy() {
        this._onDemandAllocationStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandAllocationStrategyInput() {
        return this._onDemandAllocationStrategy;
    }
    // on_demand_max_total_price - computed: false, optional: true, required: false
    _onDemandMaxTotalPrice;
    get onDemandMaxTotalPrice() {
        return this.getStringAttribute('on_demand_max_total_price');
    }
    set onDemandMaxTotalPrice(value) {
        this._onDemandMaxTotalPrice = value;
    }
    resetOnDemandMaxTotalPrice() {
        this._onDemandMaxTotalPrice = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandMaxTotalPriceInput() {
        return this._onDemandMaxTotalPrice;
    }
    // on_demand_target_capacity - computed: false, optional: true, required: false
    _onDemandTargetCapacity;
    get onDemandTargetCapacity() {
        return this.getNumberAttribute('on_demand_target_capacity');
    }
    set onDemandTargetCapacity(value) {
        this._onDemandTargetCapacity = value;
    }
    resetOnDemandTargetCapacity() {
        this._onDemandTargetCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandTargetCapacityInput() {
        return this._onDemandTargetCapacity;
    }
    // replace_unhealthy_instances - computed: false, optional: true, required: false
    _replaceUnhealthyInstances;
    get replaceUnhealthyInstances() {
        return this.getBooleanAttribute('replace_unhealthy_instances');
    }
    set replaceUnhealthyInstances(value) {
        this._replaceUnhealthyInstances = value;
    }
    resetReplaceUnhealthyInstances() {
        this._replaceUnhealthyInstances = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get replaceUnhealthyInstancesInput() {
        return this._replaceUnhealthyInstances;
    }
    // spot_price - computed: false, optional: true, required: false
    _spotPrice;
    get spotPrice() {
        return this.getStringAttribute('spot_price');
    }
    set spotPrice(value) {
        this._spotPrice = value;
    }
    resetSpotPrice() {
        this._spotPrice = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get spotPriceInput() {
        return this._spotPrice;
    }
    // spot_request_state - computed: true, optional: false, required: false
    get spotRequestState() {
        return this.getStringAttribute('spot_request_state');
    }
    // tags - computed: false, optional: true, required: false
    _tags;
    get tags() {
        return this.getStringMapAttribute('tags');
    }
    set tags(value) {
        this._tags = value;
    }
    resetTags() {
        this._tags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsInput() {
        return this._tags;
    }
    // tags_all - computed: true, optional: true, required: false
    _tagsAll;
    get tagsAll() {
        return this.getStringMapAttribute('tags_all');
    }
    set tagsAll(value) {
        this._tagsAll = value;
    }
    resetTagsAll() {
        this._tagsAll = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsAllInput() {
        return this._tagsAll;
    }
    // target_capacity - computed: false, optional: false, required: true
    _targetCapacity;
    get targetCapacity() {
        return this.getNumberAttribute('target_capacity');
    }
    set targetCapacity(value) {
        this._targetCapacity = value;
    }
    // Temporarily expose input value. Use with caution.
    get targetCapacityInput() {
        return this._targetCapacity;
    }
    // target_group_arns - computed: true, optional: true, required: false
    _targetGroupArns;
    get targetGroupArns() {
        return cdktf.Fn.tolist(this.getListAttribute('target_group_arns'));
    }
    set targetGroupArns(value) {
        this._targetGroupArns = value;
    }
    resetTargetGroupArns() {
        this._targetGroupArns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetGroupArnsInput() {
        return this._targetGroupArns;
    }
    // terminate_instances_with_expiration - computed: false, optional: true, required: false
    _terminateInstancesWithExpiration;
    get terminateInstancesWithExpiration() {
        return this.getBooleanAttribute('terminate_instances_with_expiration');
    }
    set terminateInstancesWithExpiration(value) {
        this._terminateInstancesWithExpiration = value;
    }
    resetTerminateInstancesWithExpiration() {
        this._terminateInstancesWithExpiration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get terminateInstancesWithExpirationInput() {
        return this._terminateInstancesWithExpiration;
    }
    // valid_from - computed: false, optional: true, required: false
    _validFrom;
    get validFrom() {
        return this.getStringAttribute('valid_from');
    }
    set validFrom(value) {
        this._validFrom = value;
    }
    resetValidFrom() {
        this._validFrom = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get validFromInput() {
        return this._validFrom;
    }
    // valid_until - computed: false, optional: true, required: false
    _validUntil;
    get validUntil() {
        return this.getStringAttribute('valid_until');
    }
    set validUntil(value) {
        this._validUntil = value;
    }
    resetValidUntil() {
        this._validUntil = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get validUntilInput() {
        return this._validUntil;
    }
    // wait_for_fulfillment - computed: false, optional: true, required: false
    _waitForFulfillment;
    get waitForFulfillment() {
        return this.getBooleanAttribute('wait_for_fulfillment');
    }
    set waitForFulfillment(value) {
        this._waitForFulfillment = value;
    }
    resetWaitForFulfillment() {
        this._waitForFulfillment = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get waitForFulfillmentInput() {
        return this._waitForFulfillment;
    }
    // launch_specification - computed: false, optional: true, required: false
    _launchSpecification;
    get launchSpecification() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('launch_specification')));
    }
    set launchSpecification(value) {
        this._launchSpecification = value;
    }
    resetLaunchSpecification() {
        this._launchSpecification = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchSpecificationInput() {
        return this._launchSpecification;
    }
    // launch_template_config - computed: false, optional: true, required: false
    _launchTemplateConfig;
    get launchTemplateConfig() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('launch_template_config')));
    }
    set launchTemplateConfig(value) {
        this._launchTemplateConfig = value;
    }
    resetLaunchTemplateConfig() {
        this._launchTemplateConfig = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateConfigInput() {
        return this._launchTemplateConfig;
    }
    // spot_maintenance_strategies - computed: false, optional: true, required: false
    _spotMaintenanceStrategies = new SpotFleetRequestSpotMaintenanceStrategiesOutputReference(this, "spot_maintenance_strategies", true);
    get spotMaintenanceStrategies() {
        return this._spotMaintenanceStrategies;
    }
    putSpotMaintenanceStrategies(value) {
        this._spotMaintenanceStrategies.internalValue = value;
    }
    resetSpotMaintenanceStrategies() {
        this._spotMaintenanceStrategies.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get spotMaintenanceStrategiesInput() {
        return this._spotMaintenanceStrategies.internalValue;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new SpotFleetRequestTimeoutsOutputReference(this, "timeouts", true);
    get timeouts() {
        return this._timeouts;
    }
    putTimeouts(value) {
        this._timeouts.internalValue = value;
    }
    resetTimeouts() {
        this._timeouts.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutsInput() {
        return this._timeouts.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            allocation_strategy: cdktf.stringToTerraform(this._allocationStrategy),
            excess_capacity_termination_policy: cdktf.stringToTerraform(this._excessCapacityTerminationPolicy),
            fleet_type: cdktf.stringToTerraform(this._fleetType),
            iam_fleet_role: cdktf.stringToTerraform(this._iamFleetRole),
            instance_interruption_behaviour: cdktf.stringToTerraform(this._instanceInterruptionBehaviour),
            instance_pools_to_use_count: cdktf.numberToTerraform(this._instancePoolsToUseCount),
            load_balancers: cdktf.listMapper(cdktf.stringToTerraform)(this._loadBalancers),
            on_demand_allocation_strategy: cdktf.stringToTerraform(this._onDemandAllocationStrategy),
            on_demand_max_total_price: cdktf.stringToTerraform(this._onDemandMaxTotalPrice),
            on_demand_target_capacity: cdktf.numberToTerraform(this._onDemandTargetCapacity),
            replace_unhealthy_instances: cdktf.booleanToTerraform(this._replaceUnhealthyInstances),
            spot_price: cdktf.stringToTerraform(this._spotPrice),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            target_capacity: cdktf.numberToTerraform(this._targetCapacity),
            target_group_arns: cdktf.listMapper(cdktf.stringToTerraform)(this._targetGroupArns),
            terminate_instances_with_expiration: cdktf.booleanToTerraform(this._terminateInstancesWithExpiration),
            valid_from: cdktf.stringToTerraform(this._validFrom),
            valid_until: cdktf.stringToTerraform(this._validUntil),
            wait_for_fulfillment: cdktf.booleanToTerraform(this._waitForFulfillment),
            launch_specification: cdktf.listMapper(spotFleetRequestLaunchSpecificationToTerraform)(this._launchSpecification),
            launch_template_config: cdktf.listMapper(spotFleetRequestLaunchTemplateConfigToTerraform)(this._launchTemplateConfig),
            spot_maintenance_strategies: spotFleetRequestSpotMaintenanceStrategiesToTerraform(this._spotMaintenanceStrategies.internalValue),
            timeouts: spotFleetRequestTimeoutsToTerraform(this._timeouts.internalValue),
        };
    }
}
//# sourceMappingURL=spot-fleet-request.js.map