// generated from terraform resource schema
import * as cdktf from 'cdktf';
export class Macie2ClassificationJobUserPausedDetails extends cdktf.ComplexComputedList {
    // job_expires_at - computed: true, optional: false, required: false
    get jobExpiresAt() {
        return this.getStringAttribute('job_expires_at');
    }
    // job_imminent_expiration_health_event_arn - computed: true, optional: false, required: false
    get jobImminentExpirationHealthEventArn() {
        return this.getStringAttribute('job_imminent_expiration_health_event_arn');
    }
    // job_paused_at - computed: true, optional: false, required: false
    get jobPausedAt() {
        return this.getStringAttribute('job_paused_at');
    }
}
export function macie2ClassificationJobS3JobDefinitionBucketDefinitionsToTerraform(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 {
        account_id: cdktf.stringToTerraform(struct.accountId),
        buckets: cdktf.listMapper(cdktf.stringToTerraform)(struct.buckets),
    };
}
export function macie2ClassificationJobS3JobDefinitionScopingExcludesAndSimpleScopeTermToTerraform(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 {
        comparator: cdktf.stringToTerraform(struct.comparator),
        key: cdktf.stringToTerraform(struct.key),
        values: cdktf.listMapper(cdktf.stringToTerraform)(struct.values),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingExcludesAndSimpleScopeTermOutputReference 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._comparator !== undefined) {
            hasAnyValues = true;
            internalValueResult.comparator = this._comparator;
        }
        if (this._key !== undefined) {
            hasAnyValues = true;
            internalValueResult.key = this._key;
        }
        if (this._values !== undefined) {
            hasAnyValues = true;
            internalValueResult.values = this._values;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._comparator = undefined;
            this._key = undefined;
            this._values = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._comparator = value.comparator;
            this._key = value.key;
            this._values = value.values;
        }
    }
    // comparator - computed: true, optional: true, required: false
    _comparator;
    get comparator() {
        return this.getStringAttribute('comparator');
    }
    set comparator(value) {
        this._comparator = value;
    }
    resetComparator() {
        this._comparator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get comparatorInput() {
        return this._comparator;
    }
    // key - computed: true, optional: true, required: false
    _key;
    get key() {
        return this.getStringAttribute('key');
    }
    set key(value) {
        this._key = value;
    }
    resetKey() {
        this._key = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get keyInput() {
        return this._key;
    }
    // values - computed: true, optional: true, required: false
    _values;
    get values() {
        return this.getListAttribute('values');
    }
    set values(value) {
        this._values = value;
    }
    resetValues() {
        this._values = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get valuesInput() {
        return this._values;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingExcludesAndTagScopeTermTagValuesToTerraform(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),
        value: cdktf.stringToTerraform(struct.value),
    };
}
export function macie2ClassificationJobS3JobDefinitionScopingExcludesAndTagScopeTermToTerraform(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 {
        comparator: cdktf.stringToTerraform(struct.comparator),
        key: cdktf.stringToTerraform(struct.key),
        target: cdktf.stringToTerraform(struct.target),
        tag_values: cdktf.listMapper(macie2ClassificationJobS3JobDefinitionScopingExcludesAndTagScopeTermTagValuesToTerraform)(struct.tagValues),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingExcludesAndTagScopeTermOutputReference 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._comparator !== undefined) {
            hasAnyValues = true;
            internalValueResult.comparator = this._comparator;
        }
        if (this._key !== undefined) {
            hasAnyValues = true;
            internalValueResult.key = this._key;
        }
        if (this._target !== undefined) {
            hasAnyValues = true;
            internalValueResult.target = this._target;
        }
        if (this._tagValues !== undefined) {
            hasAnyValues = true;
            internalValueResult.tagValues = this._tagValues;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._comparator = undefined;
            this._key = undefined;
            this._target = undefined;
            this._tagValues = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._comparator = value.comparator;
            this._key = value.key;
            this._target = value.target;
            this._tagValues = value.tagValues;
        }
    }
    // comparator - computed: true, optional: true, required: false
    _comparator;
    get comparator() {
        return this.getStringAttribute('comparator');
    }
    set comparator(value) {
        this._comparator = value;
    }
    resetComparator() {
        this._comparator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get comparatorInput() {
        return this._comparator;
    }
    // key - computed: true, optional: true, required: false
    _key;
    get key() {
        return this.getStringAttribute('key');
    }
    set key(value) {
        this._key = value;
    }
    resetKey() {
        this._key = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get keyInput() {
        return this._key;
    }
    // target - computed: true, optional: true, required: false
    _target;
    get target() {
        return this.getStringAttribute('target');
    }
    set target(value) {
        this._target = value;
    }
    resetTarget() {
        this._target = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetInput() {
        return this._target;
    }
    // tag_values - computed: false, optional: true, required: false
    _tagValues;
    get tagValues() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('tag_values');
    }
    set tagValues(value) {
        this._tagValues = value;
    }
    resetTagValues() {
        this._tagValues = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagValuesInput() {
        return this._tagValues;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingExcludesAndToTerraform(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 {
        simple_scope_term: macie2ClassificationJobS3JobDefinitionScopingExcludesAndSimpleScopeTermToTerraform(struct.simpleScopeTerm),
        tag_scope_term: macie2ClassificationJobS3JobDefinitionScopingExcludesAndTagScopeTermToTerraform(struct.tagScopeTerm),
    };
}
export function macie2ClassificationJobS3JobDefinitionScopingExcludesToTerraform(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 {
        and: cdktf.listMapper(macie2ClassificationJobS3JobDefinitionScopingExcludesAndToTerraform)(struct.and),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingExcludesOutputReference 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._and !== undefined) {
            hasAnyValues = true;
            internalValueResult.and = this._and;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._and = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._and = value.and;
        }
    }
    // and - computed: false, optional: true, required: false
    _and;
    get and() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('and');
    }
    set and(value) {
        this._and = value;
    }
    resetAnd() {
        this._and = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get andInput() {
        return this._and;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingIncludesAndSimpleScopeTermToTerraform(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 {
        comparator: cdktf.stringToTerraform(struct.comparator),
        key: cdktf.stringToTerraform(struct.key),
        values: cdktf.listMapper(cdktf.stringToTerraform)(struct.values),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingIncludesAndSimpleScopeTermOutputReference 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._comparator !== undefined) {
            hasAnyValues = true;
            internalValueResult.comparator = this._comparator;
        }
        if (this._key !== undefined) {
            hasAnyValues = true;
            internalValueResult.key = this._key;
        }
        if (this._values !== undefined) {
            hasAnyValues = true;
            internalValueResult.values = this._values;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._comparator = undefined;
            this._key = undefined;
            this._values = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._comparator = value.comparator;
            this._key = value.key;
            this._values = value.values;
        }
    }
    // comparator - computed: true, optional: true, required: false
    _comparator;
    get comparator() {
        return this.getStringAttribute('comparator');
    }
    set comparator(value) {
        this._comparator = value;
    }
    resetComparator() {
        this._comparator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get comparatorInput() {
        return this._comparator;
    }
    // key - computed: true, optional: true, required: false
    _key;
    get key() {
        return this.getStringAttribute('key');
    }
    set key(value) {
        this._key = value;
    }
    resetKey() {
        this._key = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get keyInput() {
        return this._key;
    }
    // values - computed: true, optional: true, required: false
    _values;
    get values() {
        return this.getListAttribute('values');
    }
    set values(value) {
        this._values = value;
    }
    resetValues() {
        this._values = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get valuesInput() {
        return this._values;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingIncludesAndTagScopeTermTagValuesToTerraform(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),
        value: cdktf.stringToTerraform(struct.value),
    };
}
export function macie2ClassificationJobS3JobDefinitionScopingIncludesAndTagScopeTermToTerraform(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 {
        comparator: cdktf.stringToTerraform(struct.comparator),
        key: cdktf.stringToTerraform(struct.key),
        target: cdktf.stringToTerraform(struct.target),
        tag_values: cdktf.listMapper(macie2ClassificationJobS3JobDefinitionScopingIncludesAndTagScopeTermTagValuesToTerraform)(struct.tagValues),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingIncludesAndTagScopeTermOutputReference 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._comparator !== undefined) {
            hasAnyValues = true;
            internalValueResult.comparator = this._comparator;
        }
        if (this._key !== undefined) {
            hasAnyValues = true;
            internalValueResult.key = this._key;
        }
        if (this._target !== undefined) {
            hasAnyValues = true;
            internalValueResult.target = this._target;
        }
        if (this._tagValues !== undefined) {
            hasAnyValues = true;
            internalValueResult.tagValues = this._tagValues;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._comparator = undefined;
            this._key = undefined;
            this._target = undefined;
            this._tagValues = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._comparator = value.comparator;
            this._key = value.key;
            this._target = value.target;
            this._tagValues = value.tagValues;
        }
    }
    // comparator - computed: true, optional: true, required: false
    _comparator;
    get comparator() {
        return this.getStringAttribute('comparator');
    }
    set comparator(value) {
        this._comparator = value;
    }
    resetComparator() {
        this._comparator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get comparatorInput() {
        return this._comparator;
    }
    // key - computed: true, optional: true, required: false
    _key;
    get key() {
        return this.getStringAttribute('key');
    }
    set key(value) {
        this._key = value;
    }
    resetKey() {
        this._key = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get keyInput() {
        return this._key;
    }
    // target - computed: true, optional: true, required: false
    _target;
    get target() {
        return this.getStringAttribute('target');
    }
    set target(value) {
        this._target = value;
    }
    resetTarget() {
        this._target = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetInput() {
        return this._target;
    }
    // tag_values - computed: false, optional: true, required: false
    _tagValues;
    get tagValues() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('tag_values');
    }
    set tagValues(value) {
        this._tagValues = value;
    }
    resetTagValues() {
        this._tagValues = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagValuesInput() {
        return this._tagValues;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingIncludesAndToTerraform(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 {
        simple_scope_term: macie2ClassificationJobS3JobDefinitionScopingIncludesAndSimpleScopeTermToTerraform(struct.simpleScopeTerm),
        tag_scope_term: macie2ClassificationJobS3JobDefinitionScopingIncludesAndTagScopeTermToTerraform(struct.tagScopeTerm),
    };
}
export function macie2ClassificationJobS3JobDefinitionScopingIncludesToTerraform(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 {
        and: cdktf.listMapper(macie2ClassificationJobS3JobDefinitionScopingIncludesAndToTerraform)(struct.and),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingIncludesOutputReference 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._and !== undefined) {
            hasAnyValues = true;
            internalValueResult.and = this._and;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._and = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._and = value.and;
        }
    }
    // and - computed: false, optional: true, required: false
    _and;
    get and() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('and');
    }
    set and(value) {
        this._and = value;
    }
    resetAnd() {
        this._and = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get andInput() {
        return this._and;
    }
}
export function macie2ClassificationJobS3JobDefinitionScopingToTerraform(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 {
        excludes: macie2ClassificationJobS3JobDefinitionScopingExcludesToTerraform(struct.excludes),
        includes: macie2ClassificationJobS3JobDefinitionScopingIncludesToTerraform(struct.includes),
    };
}
export class Macie2ClassificationJobS3JobDefinitionScopingOutputReference 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._excludes?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.excludes = this._excludes?.internalValue;
        }
        if (this._includes?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.includes = this._includes?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._excludes.internalValue = undefined;
            this._includes.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._excludes.internalValue = value.excludes;
            this._includes.internalValue = value.includes;
        }
    }
    // excludes - computed: false, optional: true, required: false
    _excludes = new Macie2ClassificationJobS3JobDefinitionScopingExcludesOutputReference(this, "excludes", true);
    get excludes() {
        return this._excludes;
    }
    putExcludes(value) {
        this._excludes.internalValue = value;
    }
    resetExcludes() {
        this._excludes.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get excludesInput() {
        return this._excludes.internalValue;
    }
    // includes - computed: false, optional: true, required: false
    _includes = new Macie2ClassificationJobS3JobDefinitionScopingIncludesOutputReference(this, "includes", true);
    get includes() {
        return this._includes;
    }
    putIncludes(value) {
        this._includes.internalValue = value;
    }
    resetIncludes() {
        this._includes.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get includesInput() {
        return this._includes.internalValue;
    }
}
export function macie2ClassificationJobS3JobDefinitionToTerraform(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 {
        bucket_definitions: cdktf.listMapper(macie2ClassificationJobS3JobDefinitionBucketDefinitionsToTerraform)(struct.bucketDefinitions),
        scoping: macie2ClassificationJobS3JobDefinitionScopingToTerraform(struct.scoping),
    };
}
export class Macie2ClassificationJobS3JobDefinitionOutputReference 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._bucketDefinitions !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketDefinitions = this._bucketDefinitions;
        }
        if (this._scoping?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.scoping = this._scoping?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucketDefinitions = undefined;
            this._scoping.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucketDefinitions = value.bucketDefinitions;
            this._scoping.internalValue = value.scoping;
        }
    }
    // bucket_definitions - computed: false, optional: true, required: false
    _bucketDefinitions;
    get bucketDefinitions() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('bucket_definitions');
    }
    set bucketDefinitions(value) {
        this._bucketDefinitions = value;
    }
    resetBucketDefinitions() {
        this._bucketDefinitions = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketDefinitionsInput() {
        return this._bucketDefinitions;
    }
    // scoping - computed: false, optional: true, required: false
    _scoping = new Macie2ClassificationJobS3JobDefinitionScopingOutputReference(this, "scoping", true);
    get scoping() {
        return this._scoping;
    }
    putScoping(value) {
        this._scoping.internalValue = value;
    }
    resetScoping() {
        this._scoping.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get scopingInput() {
        return this._scoping.internalValue;
    }
}
export function macie2ClassificationJobScheduleFrequencyToTerraform(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 {
        daily_schedule: cdktf.booleanToTerraform(struct.dailySchedule),
        monthly_schedule: cdktf.numberToTerraform(struct.monthlySchedule),
        weekly_schedule: cdktf.stringToTerraform(struct.weeklySchedule),
    };
}
export class Macie2ClassificationJobScheduleFrequencyOutputReference 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._dailySchedule !== undefined) {
            hasAnyValues = true;
            internalValueResult.dailySchedule = this._dailySchedule;
        }
        if (this._monthlySchedule !== undefined) {
            hasAnyValues = true;
            internalValueResult.monthlySchedule = this._monthlySchedule;
        }
        if (this._weeklySchedule !== undefined) {
            hasAnyValues = true;
            internalValueResult.weeklySchedule = this._weeklySchedule;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._dailySchedule = undefined;
            this._monthlySchedule = undefined;
            this._weeklySchedule = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._dailySchedule = value.dailySchedule;
            this._monthlySchedule = value.monthlySchedule;
            this._weeklySchedule = value.weeklySchedule;
        }
    }
    // daily_schedule - computed: false, optional: true, required: false
    _dailySchedule;
    get dailySchedule() {
        return this.getBooleanAttribute('daily_schedule');
    }
    set dailySchedule(value) {
        this._dailySchedule = value;
    }
    resetDailySchedule() {
        this._dailySchedule = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get dailyScheduleInput() {
        return this._dailySchedule;
    }
    // monthly_schedule - computed: true, optional: true, required: false
    _monthlySchedule;
    get monthlySchedule() {
        return this.getNumberAttribute('monthly_schedule');
    }
    set monthlySchedule(value) {
        this._monthlySchedule = value;
    }
    resetMonthlySchedule() {
        this._monthlySchedule = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get monthlyScheduleInput() {
        return this._monthlySchedule;
    }
    // weekly_schedule - computed: true, optional: true, required: false
    _weeklySchedule;
    get weeklySchedule() {
        return this.getStringAttribute('weekly_schedule');
    }
    set weeklySchedule(value) {
        this._weeklySchedule = value;
    }
    resetWeeklySchedule() {
        this._weeklySchedule = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get weeklyScheduleInput() {
        return this._weeklySchedule;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/macie2_classification_job aws_macie2_classification_job}
*/
export class Macie2ClassificationJob extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_macie2_classification_job";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/macie2_classification_job aws_macie2_classification_job} 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 Macie2ClassificationJobConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_macie2_classification_job',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._customDataIdentifierIds = config.customDataIdentifierIds;
        this._description = config.description;
        this._initialRun = config.initialRun;
        this._jobStatus = config.jobStatus;
        this._jobType = config.jobType;
        this._name = config.name;
        this._namePrefix = config.namePrefix;
        this._samplingPercentage = config.samplingPercentage;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._s3JobDefinition.internalValue = config.s3JobDefinition;
        this._scheduleFrequency.internalValue = config.scheduleFrequency;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // created_at - computed: true, optional: false, required: false
    get createdAt() {
        return this.getStringAttribute('created_at');
    }
    // custom_data_identifier_ids - computed: true, optional: true, required: false
    _customDataIdentifierIds;
    get customDataIdentifierIds() {
        return this.getListAttribute('custom_data_identifier_ids');
    }
    set customDataIdentifierIds(value) {
        this._customDataIdentifierIds = value;
    }
    resetCustomDataIdentifierIds() {
        this._customDataIdentifierIds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customDataIdentifierIdsInput() {
        return this._customDataIdentifierIds;
    }
    // description - computed: true, 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');
    }
    // initial_run - computed: false, optional: true, required: false
    _initialRun;
    get initialRun() {
        return this.getBooleanAttribute('initial_run');
    }
    set initialRun(value) {
        this._initialRun = value;
    }
    resetInitialRun() {
        this._initialRun = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get initialRunInput() {
        return this._initialRun;
    }
    // job_arn - computed: true, optional: false, required: false
    get jobArn() {
        return this.getStringAttribute('job_arn');
    }
    // job_id - computed: true, optional: false, required: false
    get jobId() {
        return this.getStringAttribute('job_id');
    }
    // job_status - computed: true, optional: true, required: false
    _jobStatus;
    get jobStatus() {
        return this.getStringAttribute('job_status');
    }
    set jobStatus(value) {
        this._jobStatus = value;
    }
    resetJobStatus() {
        this._jobStatus = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get jobStatusInput() {
        return this._jobStatus;
    }
    // job_type - computed: false, optional: false, required: true
    _jobType;
    get jobType() {
        return this.getStringAttribute('job_type');
    }
    set jobType(value) {
        this._jobType = value;
    }
    // Temporarily expose input value. Use with caution.
    get jobTypeInput() {
        return this._jobType;
    }
    // name - computed: true, 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;
    }
    // name_prefix - computed: true, optional: true, required: false
    _namePrefix;
    get namePrefix() {
        return this.getStringAttribute('name_prefix');
    }
    set namePrefix(value) {
        this._namePrefix = value;
    }
    resetNamePrefix() {
        this._namePrefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get namePrefixInput() {
        return this._namePrefix;
    }
    // sampling_percentage - computed: true, optional: true, required: false
    _samplingPercentage;
    get samplingPercentage() {
        return this.getNumberAttribute('sampling_percentage');
    }
    set samplingPercentage(value) {
        this._samplingPercentage = value;
    }
    resetSamplingPercentage() {
        this._samplingPercentage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get samplingPercentageInput() {
        return this._samplingPercentage;
    }
    // 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;
    }
    // user_paused_details - computed: true, optional: false, required: false
    userPausedDetails(index) {
        return new Macie2ClassificationJobUserPausedDetails(this, 'user_paused_details', index, false);
    }
    // s3_job_definition - computed: false, optional: false, required: true
    _s3JobDefinition = new Macie2ClassificationJobS3JobDefinitionOutputReference(this, "s3_job_definition", true);
    get s3JobDefinition() {
        return this._s3JobDefinition;
    }
    putS3JobDefinition(value) {
        this._s3JobDefinition.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get s3JobDefinitionInput() {
        return this._s3JobDefinition.internalValue;
    }
    // schedule_frequency - computed: false, optional: true, required: false
    _scheduleFrequency = new Macie2ClassificationJobScheduleFrequencyOutputReference(this, "schedule_frequency", true);
    get scheduleFrequency() {
        return this._scheduleFrequency;
    }
    putScheduleFrequency(value) {
        this._scheduleFrequency.internalValue = value;
    }
    resetScheduleFrequency() {
        this._scheduleFrequency.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get scheduleFrequencyInput() {
        return this._scheduleFrequency.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            custom_data_identifier_ids: cdktf.listMapper(cdktf.stringToTerraform)(this._customDataIdentifierIds),
            description: cdktf.stringToTerraform(this._description),
            initial_run: cdktf.booleanToTerraform(this._initialRun),
            job_status: cdktf.stringToTerraform(this._jobStatus),
            job_type: cdktf.stringToTerraform(this._jobType),
            name: cdktf.stringToTerraform(this._name),
            name_prefix: cdktf.stringToTerraform(this._namePrefix),
            sampling_percentage: cdktf.numberToTerraform(this._samplingPercentage),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            s3_job_definition: macie2ClassificationJobS3JobDefinitionToTerraform(this._s3JobDefinition.internalValue),
            schedule_frequency: macie2ClassificationJobScheduleFrequencyToTerraform(this._scheduleFrequency.internalValue),
        };
    }
}
//# sourceMappingURL=macie2-classification-job.js.map