// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function ssmMaintenanceWindowTaskTargetsToTerraform(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 {
        key: cdktf.stringToTerraform(struct.key),
        values: cdktf.listMapper(cdktf.stringToTerraform)(struct.values),
    };
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersParameterToTerraform(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 {
        name: cdktf.stringToTerraform(struct.name),
        values: cdktf.listMapper(cdktf.stringToTerraform)(struct.values),
    };
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersToTerraform(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 {
        document_version: cdktf.stringToTerraform(struct.documentVersion),
        parameter: cdktf.listMapper(ssmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersParameterToTerraform)(struct.parameter),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersOutputReference 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._documentVersion !== undefined) {
            hasAnyValues = true;
            internalValueResult.documentVersion = this._documentVersion;
        }
        if (this._parameter !== undefined) {
            hasAnyValues = true;
            internalValueResult.parameter = this._parameter;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._documentVersion = undefined;
            this._parameter = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._documentVersion = value.documentVersion;
            this._parameter = value.parameter;
        }
    }
    // document_version - computed: false, optional: true, required: false
    _documentVersion;
    get documentVersion() {
        return this.getStringAttribute('document_version');
    }
    set documentVersion(value) {
        this._documentVersion = value;
    }
    resetDocumentVersion() {
        this._documentVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get documentVersionInput() {
        return this._documentVersion;
    }
    // parameter - computed: false, optional: true, required: false
    _parameter;
    get parameter() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('parameter')));
    }
    set parameter(value) {
        this._parameter = value;
    }
    resetParameter() {
        this._parameter = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parameterInput() {
        return this._parameter;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersLambdaParametersToTerraform(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 {
        client_context: cdktf.stringToTerraform(struct.clientContext),
        payload: cdktf.stringToTerraform(struct.payload),
        qualifier: cdktf.stringToTerraform(struct.qualifier),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersLambdaParametersOutputReference 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._clientContext !== undefined) {
            hasAnyValues = true;
            internalValueResult.clientContext = this._clientContext;
        }
        if (this._payload !== undefined) {
            hasAnyValues = true;
            internalValueResult.payload = this._payload;
        }
        if (this._qualifier !== undefined) {
            hasAnyValues = true;
            internalValueResult.qualifier = this._qualifier;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._clientContext = undefined;
            this._payload = undefined;
            this._qualifier = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._clientContext = value.clientContext;
            this._payload = value.payload;
            this._qualifier = value.qualifier;
        }
    }
    // client_context - computed: false, optional: true, required: false
    _clientContext;
    get clientContext() {
        return this.getStringAttribute('client_context');
    }
    set clientContext(value) {
        this._clientContext = value;
    }
    resetClientContext() {
        this._clientContext = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clientContextInput() {
        return this._clientContext;
    }
    // payload - computed: false, optional: true, required: false
    _payload;
    get payload() {
        return this.getStringAttribute('payload');
    }
    set payload(value) {
        this._payload = value;
    }
    resetPayload() {
        this._payload = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get payloadInput() {
        return this._payload;
    }
    // qualifier - computed: false, optional: true, required: false
    _qualifier;
    get qualifier() {
        return this.getStringAttribute('qualifier');
    }
    set qualifier(value) {
        this._qualifier = value;
    }
    resetQualifier() {
        this._qualifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get qualifierInput() {
        return this._qualifier;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersCloudwatchConfigToTerraform(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 {
        cloudwatch_log_group_name: cdktf.stringToTerraform(struct.cloudwatchLogGroupName),
        cloudwatch_output_enabled: cdktf.booleanToTerraform(struct.cloudwatchOutputEnabled),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersCloudwatchConfigOutputReference 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._cloudwatchLogGroupName !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchLogGroupName = this._cloudwatchLogGroupName;
        }
        if (this._cloudwatchOutputEnabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchOutputEnabled = this._cloudwatchOutputEnabled;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cloudwatchLogGroupName = undefined;
            this._cloudwatchOutputEnabled = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cloudwatchLogGroupName = value.cloudwatchLogGroupName;
            this._cloudwatchOutputEnabled = value.cloudwatchOutputEnabled;
        }
    }
    // cloudwatch_log_group_name - computed: true, optional: true, required: false
    _cloudwatchLogGroupName;
    get cloudwatchLogGroupName() {
        return this.getStringAttribute('cloudwatch_log_group_name');
    }
    set cloudwatchLogGroupName(value) {
        this._cloudwatchLogGroupName = value;
    }
    resetCloudwatchLogGroupName() {
        this._cloudwatchLogGroupName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchLogGroupNameInput() {
        return this._cloudwatchLogGroupName;
    }
    // cloudwatch_output_enabled - computed: false, optional: true, required: false
    _cloudwatchOutputEnabled;
    get cloudwatchOutputEnabled() {
        return this.getBooleanAttribute('cloudwatch_output_enabled');
    }
    set cloudwatchOutputEnabled(value) {
        this._cloudwatchOutputEnabled = value;
    }
    resetCloudwatchOutputEnabled() {
        this._cloudwatchOutputEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchOutputEnabledInput() {
        return this._cloudwatchOutputEnabled;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersNotificationConfigToTerraform(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 {
        notification_arn: cdktf.stringToTerraform(struct.notificationArn),
        notification_events: cdktf.listMapper(cdktf.stringToTerraform)(struct.notificationEvents),
        notification_type: cdktf.stringToTerraform(struct.notificationType),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersNotificationConfigOutputReference 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._notificationArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.notificationArn = this._notificationArn;
        }
        if (this._notificationEvents !== undefined) {
            hasAnyValues = true;
            internalValueResult.notificationEvents = this._notificationEvents;
        }
        if (this._notificationType !== undefined) {
            hasAnyValues = true;
            internalValueResult.notificationType = this._notificationType;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._notificationArn = undefined;
            this._notificationEvents = undefined;
            this._notificationType = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._notificationArn = value.notificationArn;
            this._notificationEvents = value.notificationEvents;
            this._notificationType = value.notificationType;
        }
    }
    // notification_arn - computed: false, optional: true, required: false
    _notificationArn;
    get notificationArn() {
        return this.getStringAttribute('notification_arn');
    }
    set notificationArn(value) {
        this._notificationArn = value;
    }
    resetNotificationArn() {
        this._notificationArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get notificationArnInput() {
        return this._notificationArn;
    }
    // notification_events - computed: false, optional: true, required: false
    _notificationEvents;
    get notificationEvents() {
        return this.getListAttribute('notification_events');
    }
    set notificationEvents(value) {
        this._notificationEvents = value;
    }
    resetNotificationEvents() {
        this._notificationEvents = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get notificationEventsInput() {
        return this._notificationEvents;
    }
    // notification_type - computed: false, optional: true, required: false
    _notificationType;
    get notificationType() {
        return this.getStringAttribute('notification_type');
    }
    set notificationType(value) {
        this._notificationType = value;
    }
    resetNotificationType() {
        this._notificationType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get notificationTypeInput() {
        return this._notificationType;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersParameterToTerraform(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 {
        name: cdktf.stringToTerraform(struct.name),
        values: cdktf.listMapper(cdktf.stringToTerraform)(struct.values),
    };
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersToTerraform(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 {
        comment: cdktf.stringToTerraform(struct.comment),
        document_hash: cdktf.stringToTerraform(struct.documentHash),
        document_hash_type: cdktf.stringToTerraform(struct.documentHashType),
        document_version: cdktf.stringToTerraform(struct.documentVersion),
        output_s3_bucket: cdktf.stringToTerraform(struct.outputS3Bucket),
        output_s3_key_prefix: cdktf.stringToTerraform(struct.outputS3KeyPrefix),
        service_role_arn: cdktf.stringToTerraform(struct.serviceRoleArn),
        timeout_seconds: cdktf.numberToTerraform(struct.timeoutSeconds),
        cloudwatch_config: ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersCloudwatchConfigToTerraform(struct.cloudwatchConfig),
        notification_config: ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersNotificationConfigToTerraform(struct.notificationConfig),
        parameter: cdktf.listMapper(ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersParameterToTerraform)(struct.parameter),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersOutputReference 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._comment !== undefined) {
            hasAnyValues = true;
            internalValueResult.comment = this._comment;
        }
        if (this._documentHash !== undefined) {
            hasAnyValues = true;
            internalValueResult.documentHash = this._documentHash;
        }
        if (this._documentHashType !== undefined) {
            hasAnyValues = true;
            internalValueResult.documentHashType = this._documentHashType;
        }
        if (this._documentVersion !== undefined) {
            hasAnyValues = true;
            internalValueResult.documentVersion = this._documentVersion;
        }
        if (this._outputS3Bucket !== undefined) {
            hasAnyValues = true;
            internalValueResult.outputS3Bucket = this._outputS3Bucket;
        }
        if (this._outputS3KeyPrefix !== undefined) {
            hasAnyValues = true;
            internalValueResult.outputS3KeyPrefix = this._outputS3KeyPrefix;
        }
        if (this._serviceRoleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.serviceRoleArn = this._serviceRoleArn;
        }
        if (this._timeoutSeconds !== undefined) {
            hasAnyValues = true;
            internalValueResult.timeoutSeconds = this._timeoutSeconds;
        }
        if (this._cloudwatchConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchConfig = this._cloudwatchConfig?.internalValue;
        }
        if (this._notificationConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.notificationConfig = this._notificationConfig?.internalValue;
        }
        if (this._parameter !== undefined) {
            hasAnyValues = true;
            internalValueResult.parameter = this._parameter;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._comment = undefined;
            this._documentHash = undefined;
            this._documentHashType = undefined;
            this._documentVersion = undefined;
            this._outputS3Bucket = undefined;
            this._outputS3KeyPrefix = undefined;
            this._serviceRoleArn = undefined;
            this._timeoutSeconds = undefined;
            this._cloudwatchConfig.internalValue = undefined;
            this._notificationConfig.internalValue = undefined;
            this._parameter = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._comment = value.comment;
            this._documentHash = value.documentHash;
            this._documentHashType = value.documentHashType;
            this._documentVersion = value.documentVersion;
            this._outputS3Bucket = value.outputS3Bucket;
            this._outputS3KeyPrefix = value.outputS3KeyPrefix;
            this._serviceRoleArn = value.serviceRoleArn;
            this._timeoutSeconds = value.timeoutSeconds;
            this._cloudwatchConfig.internalValue = value.cloudwatchConfig;
            this._notificationConfig.internalValue = value.notificationConfig;
            this._parameter = value.parameter;
        }
    }
    // comment - computed: false, optional: true, required: false
    _comment;
    get comment() {
        return this.getStringAttribute('comment');
    }
    set comment(value) {
        this._comment = value;
    }
    resetComment() {
        this._comment = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get commentInput() {
        return this._comment;
    }
    // document_hash - computed: false, optional: true, required: false
    _documentHash;
    get documentHash() {
        return this.getStringAttribute('document_hash');
    }
    set documentHash(value) {
        this._documentHash = value;
    }
    resetDocumentHash() {
        this._documentHash = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get documentHashInput() {
        return this._documentHash;
    }
    // document_hash_type - computed: false, optional: true, required: false
    _documentHashType;
    get documentHashType() {
        return this.getStringAttribute('document_hash_type');
    }
    set documentHashType(value) {
        this._documentHashType = value;
    }
    resetDocumentHashType() {
        this._documentHashType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get documentHashTypeInput() {
        return this._documentHashType;
    }
    // document_version - computed: false, optional: true, required: false
    _documentVersion;
    get documentVersion() {
        return this.getStringAttribute('document_version');
    }
    set documentVersion(value) {
        this._documentVersion = value;
    }
    resetDocumentVersion() {
        this._documentVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get documentVersionInput() {
        return this._documentVersion;
    }
    // output_s3_bucket - computed: false, optional: true, required: false
    _outputS3Bucket;
    get outputS3Bucket() {
        return this.getStringAttribute('output_s3_bucket');
    }
    set outputS3Bucket(value) {
        this._outputS3Bucket = value;
    }
    resetOutputS3Bucket() {
        this._outputS3Bucket = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get outputS3BucketInput() {
        return this._outputS3Bucket;
    }
    // output_s3_key_prefix - computed: false, optional: true, required: false
    _outputS3KeyPrefix;
    get outputS3KeyPrefix() {
        return this.getStringAttribute('output_s3_key_prefix');
    }
    set outputS3KeyPrefix(value) {
        this._outputS3KeyPrefix = value;
    }
    resetOutputS3KeyPrefix() {
        this._outputS3KeyPrefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get outputS3KeyPrefixInput() {
        return this._outputS3KeyPrefix;
    }
    // service_role_arn - computed: false, optional: true, required: false
    _serviceRoleArn;
    get serviceRoleArn() {
        return this.getStringAttribute('service_role_arn');
    }
    set serviceRoleArn(value) {
        this._serviceRoleArn = value;
    }
    resetServiceRoleArn() {
        this._serviceRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serviceRoleArnInput() {
        return this._serviceRoleArn;
    }
    // timeout_seconds - computed: false, optional: true, required: false
    _timeoutSeconds;
    get timeoutSeconds() {
        return this.getNumberAttribute('timeout_seconds');
    }
    set timeoutSeconds(value) {
        this._timeoutSeconds = value;
    }
    resetTimeoutSeconds() {
        this._timeoutSeconds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutSecondsInput() {
        return this._timeoutSeconds;
    }
    // cloudwatch_config - computed: false, optional: true, required: false
    _cloudwatchConfig = new SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersCloudwatchConfigOutputReference(this, "cloudwatch_config", true);
    get cloudwatchConfig() {
        return this._cloudwatchConfig;
    }
    putCloudwatchConfig(value) {
        this._cloudwatchConfig.internalValue = value;
    }
    resetCloudwatchConfig() {
        this._cloudwatchConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchConfigInput() {
        return this._cloudwatchConfig.internalValue;
    }
    // notification_config - computed: false, optional: true, required: false
    _notificationConfig = new SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersNotificationConfigOutputReference(this, "notification_config", true);
    get notificationConfig() {
        return this._notificationConfig;
    }
    putNotificationConfig(value) {
        this._notificationConfig.internalValue = value;
    }
    resetNotificationConfig() {
        this._notificationConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get notificationConfigInput() {
        return this._notificationConfig.internalValue;
    }
    // parameter - computed: false, optional: true, required: false
    _parameter;
    get parameter() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('parameter')));
    }
    set parameter(value) {
        this._parameter = value;
    }
    resetParameter() {
        this._parameter = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parameterInput() {
        return this._parameter;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersStepFunctionsParametersToTerraform(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 {
        input: cdktf.stringToTerraform(struct.input),
        name: cdktf.stringToTerraform(struct.name),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersStepFunctionsParametersOutputReference 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._input !== undefined) {
            hasAnyValues = true;
            internalValueResult.input = this._input;
        }
        if (this._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._input = undefined;
            this._name = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._input = value.input;
            this._name = value.name;
        }
    }
    // input - computed: false, optional: true, required: false
    _input;
    get input() {
        return this.getStringAttribute('input');
    }
    set input(value) {
        this._input = value;
    }
    resetInput() {
        this._input = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inputInput() {
        return this._input;
    }
    // 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;
    }
}
export function ssmMaintenanceWindowTaskTaskInvocationParametersToTerraform(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 {
        automation_parameters: ssmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersToTerraform(struct.automationParameters),
        lambda_parameters: ssmMaintenanceWindowTaskTaskInvocationParametersLambdaParametersToTerraform(struct.lambdaParameters),
        run_command_parameters: ssmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersToTerraform(struct.runCommandParameters),
        step_functions_parameters: ssmMaintenanceWindowTaskTaskInvocationParametersStepFunctionsParametersToTerraform(struct.stepFunctionsParameters),
    };
}
export class SsmMaintenanceWindowTaskTaskInvocationParametersOutputReference 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._automationParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.automationParameters = this._automationParameters?.internalValue;
        }
        if (this._lambdaParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambdaParameters = this._lambdaParameters?.internalValue;
        }
        if (this._runCommandParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.runCommandParameters = this._runCommandParameters?.internalValue;
        }
        if (this._stepFunctionsParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.stepFunctionsParameters = this._stepFunctionsParameters?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._automationParameters.internalValue = undefined;
            this._lambdaParameters.internalValue = undefined;
            this._runCommandParameters.internalValue = undefined;
            this._stepFunctionsParameters.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._automationParameters.internalValue = value.automationParameters;
            this._lambdaParameters.internalValue = value.lambdaParameters;
            this._runCommandParameters.internalValue = value.runCommandParameters;
            this._stepFunctionsParameters.internalValue = value.stepFunctionsParameters;
        }
    }
    // automation_parameters - computed: false, optional: true, required: false
    _automationParameters = new SsmMaintenanceWindowTaskTaskInvocationParametersAutomationParametersOutputReference(this, "automation_parameters", true);
    get automationParameters() {
        return this._automationParameters;
    }
    putAutomationParameters(value) {
        this._automationParameters.internalValue = value;
    }
    resetAutomationParameters() {
        this._automationParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get automationParametersInput() {
        return this._automationParameters.internalValue;
    }
    // lambda_parameters - computed: false, optional: true, required: false
    _lambdaParameters = new SsmMaintenanceWindowTaskTaskInvocationParametersLambdaParametersOutputReference(this, "lambda_parameters", true);
    get lambdaParameters() {
        return this._lambdaParameters;
    }
    putLambdaParameters(value) {
        this._lambdaParameters.internalValue = value;
    }
    resetLambdaParameters() {
        this._lambdaParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaParametersInput() {
        return this._lambdaParameters.internalValue;
    }
    // run_command_parameters - computed: false, optional: true, required: false
    _runCommandParameters = new SsmMaintenanceWindowTaskTaskInvocationParametersRunCommandParametersOutputReference(this, "run_command_parameters", true);
    get runCommandParameters() {
        return this._runCommandParameters;
    }
    putRunCommandParameters(value) {
        this._runCommandParameters.internalValue = value;
    }
    resetRunCommandParameters() {
        this._runCommandParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get runCommandParametersInput() {
        return this._runCommandParameters.internalValue;
    }
    // step_functions_parameters - computed: false, optional: true, required: false
    _stepFunctionsParameters = new SsmMaintenanceWindowTaskTaskInvocationParametersStepFunctionsParametersOutputReference(this, "step_functions_parameters", true);
    get stepFunctionsParameters() {
        return this._stepFunctionsParameters;
    }
    putStepFunctionsParameters(value) {
        this._stepFunctionsParameters.internalValue = value;
    }
    resetStepFunctionsParameters() {
        this._stepFunctionsParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get stepFunctionsParametersInput() {
        return this._stepFunctionsParameters.internalValue;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/ssm_maintenance_window_task aws_ssm_maintenance_window_task}
*/
export class SsmMaintenanceWindowTask extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_ssm_maintenance_window_task";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/ssm_maintenance_window_task aws_ssm_maintenance_window_task} 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 SsmMaintenanceWindowTaskConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_ssm_maintenance_window_task',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._description = config.description;
        this._maxConcurrency = config.maxConcurrency;
        this._maxErrors = config.maxErrors;
        this._name = config.name;
        this._priority = config.priority;
        this._serviceRoleArn = config.serviceRoleArn;
        this._taskArn = config.taskArn;
        this._taskType = config.taskType;
        this._windowId = config.windowId;
        this._targets = config.targets;
        this._taskInvocationParameters.internalValue = config.taskInvocationParameters;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // description - computed: false, optional: true, required: false
    _description;
    get description() {
        return this.getStringAttribute('description');
    }
    set description(value) {
        this._description = value;
    }
    resetDescription() {
        this._description = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get descriptionInput() {
        return this._description;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // max_concurrency - computed: false, optional: false, required: true
    _maxConcurrency;
    get maxConcurrency() {
        return this.getStringAttribute('max_concurrency');
    }
    set maxConcurrency(value) {
        this._maxConcurrency = value;
    }
    // Temporarily expose input value. Use with caution.
    get maxConcurrencyInput() {
        return this._maxConcurrency;
    }
    // max_errors - computed: false, optional: false, required: true
    _maxErrors;
    get maxErrors() {
        return this.getStringAttribute('max_errors');
    }
    set maxErrors(value) {
        this._maxErrors = value;
    }
    // Temporarily expose input value. Use with caution.
    get maxErrorsInput() {
        return this._maxErrors;
    }
    // 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;
    }
    // priority - computed: false, optional: true, required: false
    _priority;
    get priority() {
        return this.getNumberAttribute('priority');
    }
    set priority(value) {
        this._priority = value;
    }
    resetPriority() {
        this._priority = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get priorityInput() {
        return this._priority;
    }
    // service_role_arn - computed: true, optional: true, required: false
    _serviceRoleArn;
    get serviceRoleArn() {
        return this.getStringAttribute('service_role_arn');
    }
    set serviceRoleArn(value) {
        this._serviceRoleArn = value;
    }
    resetServiceRoleArn() {
        this._serviceRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serviceRoleArnInput() {
        return this._serviceRoleArn;
    }
    // task_arn - computed: false, optional: false, required: true
    _taskArn;
    get taskArn() {
        return this.getStringAttribute('task_arn');
    }
    set taskArn(value) {
        this._taskArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get taskArnInput() {
        return this._taskArn;
    }
    // task_type - computed: false, optional: false, required: true
    _taskType;
    get taskType() {
        return this.getStringAttribute('task_type');
    }
    set taskType(value) {
        this._taskType = value;
    }
    // Temporarily expose input value. Use with caution.
    get taskTypeInput() {
        return this._taskType;
    }
    // window_id - computed: false, optional: false, required: true
    _windowId;
    get windowId() {
        return this.getStringAttribute('window_id');
    }
    set windowId(value) {
        this._windowId = value;
    }
    // Temporarily expose input value. Use with caution.
    get windowIdInput() {
        return this._windowId;
    }
    // targets - computed: false, optional: true, required: false
    _targets;
    get targets() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('targets');
    }
    set targets(value) {
        this._targets = value;
    }
    resetTargets() {
        this._targets = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetsInput() {
        return this._targets;
    }
    // task_invocation_parameters - computed: false, optional: true, required: false
    _taskInvocationParameters = new SsmMaintenanceWindowTaskTaskInvocationParametersOutputReference(this, "task_invocation_parameters", true);
    get taskInvocationParameters() {
        return this._taskInvocationParameters;
    }
    putTaskInvocationParameters(value) {
        this._taskInvocationParameters.internalValue = value;
    }
    resetTaskInvocationParameters() {
        this._taskInvocationParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get taskInvocationParametersInput() {
        return this._taskInvocationParameters.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            description: cdktf.stringToTerraform(this._description),
            max_concurrency: cdktf.stringToTerraform(this._maxConcurrency),
            max_errors: cdktf.stringToTerraform(this._maxErrors),
            name: cdktf.stringToTerraform(this._name),
            priority: cdktf.numberToTerraform(this._priority),
            service_role_arn: cdktf.stringToTerraform(this._serviceRoleArn),
            task_arn: cdktf.stringToTerraform(this._taskArn),
            task_type: cdktf.stringToTerraform(this._taskType),
            window_id: cdktf.stringToTerraform(this._windowId),
            targets: cdktf.listMapper(ssmMaintenanceWindowTaskTargetsToTerraform)(this._targets),
            task_invocation_parameters: ssmMaintenanceWindowTaskTaskInvocationParametersToTerraform(this._taskInvocationParameters.internalValue),
        };
    }
}
//# sourceMappingURL=ssm-maintenance-window-task.js.map