// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function cognitoUserPoolAccountRecoverySettingRecoveryMechanismToTerraform(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),
        priority: cdktf.numberToTerraform(struct.priority),
    };
}
export function cognitoUserPoolAccountRecoverySettingToTerraform(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 {
        recovery_mechanism: cdktf.listMapper(cognitoUserPoolAccountRecoverySettingRecoveryMechanismToTerraform)(struct.recoveryMechanism),
    };
}
export class CognitoUserPoolAccountRecoverySettingOutputReference 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._recoveryMechanism !== undefined) {
            hasAnyValues = true;
            internalValueResult.recoveryMechanism = this._recoveryMechanism;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recoveryMechanism = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recoveryMechanism = value.recoveryMechanism;
        }
    }
    // recovery_mechanism - computed: false, optional: false, required: true
    _recoveryMechanism;
    get recoveryMechanism() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('recovery_mechanism')));
    }
    set recoveryMechanism(value) {
        this._recoveryMechanism = value;
    }
    // Temporarily expose input value. Use with caution.
    get recoveryMechanismInput() {
        return this._recoveryMechanism;
    }
}
export function cognitoUserPoolAdminCreateUserConfigInviteMessageTemplateToTerraform(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 {
        email_message: cdktf.stringToTerraform(struct.emailMessage),
        email_subject: cdktf.stringToTerraform(struct.emailSubject),
        sms_message: cdktf.stringToTerraform(struct.smsMessage),
    };
}
export class CognitoUserPoolAdminCreateUserConfigInviteMessageTemplateOutputReference 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._emailMessage !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailMessage = this._emailMessage;
        }
        if (this._emailSubject !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailSubject = this._emailSubject;
        }
        if (this._smsMessage !== undefined) {
            hasAnyValues = true;
            internalValueResult.smsMessage = this._smsMessage;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._emailMessage = undefined;
            this._emailSubject = undefined;
            this._smsMessage = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._emailMessage = value.emailMessage;
            this._emailSubject = value.emailSubject;
            this._smsMessage = value.smsMessage;
        }
    }
    // email_message - computed: false, optional: true, required: false
    _emailMessage;
    get emailMessage() {
        return this.getStringAttribute('email_message');
    }
    set emailMessage(value) {
        this._emailMessage = value;
    }
    resetEmailMessage() {
        this._emailMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailMessageInput() {
        return this._emailMessage;
    }
    // email_subject - computed: false, optional: true, required: false
    _emailSubject;
    get emailSubject() {
        return this.getStringAttribute('email_subject');
    }
    set emailSubject(value) {
        this._emailSubject = value;
    }
    resetEmailSubject() {
        this._emailSubject = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailSubjectInput() {
        return this._emailSubject;
    }
    // sms_message - computed: false, optional: true, required: false
    _smsMessage;
    get smsMessage() {
        return this.getStringAttribute('sms_message');
    }
    set smsMessage(value) {
        this._smsMessage = value;
    }
    resetSmsMessage() {
        this._smsMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smsMessageInput() {
        return this._smsMessage;
    }
}
export function cognitoUserPoolAdminCreateUserConfigToTerraform(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 {
        allow_admin_create_user_only: cdktf.booleanToTerraform(struct.allowAdminCreateUserOnly),
        invite_message_template: cognitoUserPoolAdminCreateUserConfigInviteMessageTemplateToTerraform(struct.inviteMessageTemplate),
    };
}
export class CognitoUserPoolAdminCreateUserConfigOutputReference 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._allowAdminCreateUserOnly !== undefined) {
            hasAnyValues = true;
            internalValueResult.allowAdminCreateUserOnly = this._allowAdminCreateUserOnly;
        }
        if (this._inviteMessageTemplate?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.inviteMessageTemplate = this._inviteMessageTemplate?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._allowAdminCreateUserOnly = undefined;
            this._inviteMessageTemplate.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._allowAdminCreateUserOnly = value.allowAdminCreateUserOnly;
            this._inviteMessageTemplate.internalValue = value.inviteMessageTemplate;
        }
    }
    // allow_admin_create_user_only - computed: false, optional: true, required: false
    _allowAdminCreateUserOnly;
    get allowAdminCreateUserOnly() {
        return this.getBooleanAttribute('allow_admin_create_user_only');
    }
    set allowAdminCreateUserOnly(value) {
        this._allowAdminCreateUserOnly = value;
    }
    resetAllowAdminCreateUserOnly() {
        this._allowAdminCreateUserOnly = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get allowAdminCreateUserOnlyInput() {
        return this._allowAdminCreateUserOnly;
    }
    // invite_message_template - computed: false, optional: true, required: false
    _inviteMessageTemplate = new CognitoUserPoolAdminCreateUserConfigInviteMessageTemplateOutputReference(this, "invite_message_template", true);
    get inviteMessageTemplate() {
        return this._inviteMessageTemplate;
    }
    putInviteMessageTemplate(value) {
        this._inviteMessageTemplate.internalValue = value;
    }
    resetInviteMessageTemplate() {
        this._inviteMessageTemplate.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inviteMessageTemplateInput() {
        return this._inviteMessageTemplate.internalValue;
    }
}
export function cognitoUserPoolDeviceConfigurationToTerraform(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 {
        challenge_required_on_new_device: cdktf.booleanToTerraform(struct.challengeRequiredOnNewDevice),
        device_only_remembered_on_user_prompt: cdktf.booleanToTerraform(struct.deviceOnlyRememberedOnUserPrompt),
    };
}
export class CognitoUserPoolDeviceConfigurationOutputReference 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._challengeRequiredOnNewDevice !== undefined) {
            hasAnyValues = true;
            internalValueResult.challengeRequiredOnNewDevice = this._challengeRequiredOnNewDevice;
        }
        if (this._deviceOnlyRememberedOnUserPrompt !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceOnlyRememberedOnUserPrompt = this._deviceOnlyRememberedOnUserPrompt;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._challengeRequiredOnNewDevice = undefined;
            this._deviceOnlyRememberedOnUserPrompt = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._challengeRequiredOnNewDevice = value.challengeRequiredOnNewDevice;
            this._deviceOnlyRememberedOnUserPrompt = value.deviceOnlyRememberedOnUserPrompt;
        }
    }
    // challenge_required_on_new_device - computed: false, optional: true, required: false
    _challengeRequiredOnNewDevice;
    get challengeRequiredOnNewDevice() {
        return this.getBooleanAttribute('challenge_required_on_new_device');
    }
    set challengeRequiredOnNewDevice(value) {
        this._challengeRequiredOnNewDevice = value;
    }
    resetChallengeRequiredOnNewDevice() {
        this._challengeRequiredOnNewDevice = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get challengeRequiredOnNewDeviceInput() {
        return this._challengeRequiredOnNewDevice;
    }
    // device_only_remembered_on_user_prompt - computed: false, optional: true, required: false
    _deviceOnlyRememberedOnUserPrompt;
    get deviceOnlyRememberedOnUserPrompt() {
        return this.getBooleanAttribute('device_only_remembered_on_user_prompt');
    }
    set deviceOnlyRememberedOnUserPrompt(value) {
        this._deviceOnlyRememberedOnUserPrompt = value;
    }
    resetDeviceOnlyRememberedOnUserPrompt() {
        this._deviceOnlyRememberedOnUserPrompt = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceOnlyRememberedOnUserPromptInput() {
        return this._deviceOnlyRememberedOnUserPrompt;
    }
}
export function cognitoUserPoolEmailConfigurationToTerraform(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 {
        configuration_set: cdktf.stringToTerraform(struct.configurationSet),
        email_sending_account: cdktf.stringToTerraform(struct.emailSendingAccount),
        from_email_address: cdktf.stringToTerraform(struct.fromEmailAddress),
        reply_to_email_address: cdktf.stringToTerraform(struct.replyToEmailAddress),
        source_arn: cdktf.stringToTerraform(struct.sourceArn),
    };
}
export class CognitoUserPoolEmailConfigurationOutputReference 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._configurationSet !== undefined) {
            hasAnyValues = true;
            internalValueResult.configurationSet = this._configurationSet;
        }
        if (this._emailSendingAccount !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailSendingAccount = this._emailSendingAccount;
        }
        if (this._fromEmailAddress !== undefined) {
            hasAnyValues = true;
            internalValueResult.fromEmailAddress = this._fromEmailAddress;
        }
        if (this._replyToEmailAddress !== undefined) {
            hasAnyValues = true;
            internalValueResult.replyToEmailAddress = this._replyToEmailAddress;
        }
        if (this._sourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.sourceArn = this._sourceArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._configurationSet = undefined;
            this._emailSendingAccount = undefined;
            this._fromEmailAddress = undefined;
            this._replyToEmailAddress = undefined;
            this._sourceArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._configurationSet = value.configurationSet;
            this._emailSendingAccount = value.emailSendingAccount;
            this._fromEmailAddress = value.fromEmailAddress;
            this._replyToEmailAddress = value.replyToEmailAddress;
            this._sourceArn = value.sourceArn;
        }
    }
    // configuration_set - computed: false, optional: true, required: false
    _configurationSet;
    get configurationSet() {
        return this.getStringAttribute('configuration_set');
    }
    set configurationSet(value) {
        this._configurationSet = value;
    }
    resetConfigurationSet() {
        this._configurationSet = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get configurationSetInput() {
        return this._configurationSet;
    }
    // email_sending_account - computed: false, optional: true, required: false
    _emailSendingAccount;
    get emailSendingAccount() {
        return this.getStringAttribute('email_sending_account');
    }
    set emailSendingAccount(value) {
        this._emailSendingAccount = value;
    }
    resetEmailSendingAccount() {
        this._emailSendingAccount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailSendingAccountInput() {
        return this._emailSendingAccount;
    }
    // from_email_address - computed: false, optional: true, required: false
    _fromEmailAddress;
    get fromEmailAddress() {
        return this.getStringAttribute('from_email_address');
    }
    set fromEmailAddress(value) {
        this._fromEmailAddress = value;
    }
    resetFromEmailAddress() {
        this._fromEmailAddress = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get fromEmailAddressInput() {
        return this._fromEmailAddress;
    }
    // reply_to_email_address - computed: false, optional: true, required: false
    _replyToEmailAddress;
    get replyToEmailAddress() {
        return this.getStringAttribute('reply_to_email_address');
    }
    set replyToEmailAddress(value) {
        this._replyToEmailAddress = value;
    }
    resetReplyToEmailAddress() {
        this._replyToEmailAddress = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get replyToEmailAddressInput() {
        return this._replyToEmailAddress;
    }
    // source_arn - computed: false, optional: true, required: false
    _sourceArn;
    get sourceArn() {
        return this.getStringAttribute('source_arn');
    }
    set sourceArn(value) {
        this._sourceArn = value;
    }
    resetSourceArn() {
        this._sourceArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sourceArnInput() {
        return this._sourceArn;
    }
}
export function cognitoUserPoolLambdaConfigCustomEmailSenderToTerraform(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 {
        lambda_arn: cdktf.stringToTerraform(struct.lambdaArn),
        lambda_version: cdktf.stringToTerraform(struct.lambdaVersion),
    };
}
export class CognitoUserPoolLambdaConfigCustomEmailSenderOutputReference 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._lambdaArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambdaArn = this._lambdaArn;
        }
        if (this._lambdaVersion !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambdaVersion = this._lambdaVersion;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._lambdaArn = undefined;
            this._lambdaVersion = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._lambdaArn = value.lambdaArn;
            this._lambdaVersion = value.lambdaVersion;
        }
    }
    // lambda_arn - computed: false, optional: false, required: true
    _lambdaArn;
    get lambdaArn() {
        return this.getStringAttribute('lambda_arn');
    }
    set lambdaArn(value) {
        this._lambdaArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaArnInput() {
        return this._lambdaArn;
    }
    // lambda_version - computed: false, optional: false, required: true
    _lambdaVersion;
    get lambdaVersion() {
        return this.getStringAttribute('lambda_version');
    }
    set lambdaVersion(value) {
        this._lambdaVersion = value;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaVersionInput() {
        return this._lambdaVersion;
    }
}
export function cognitoUserPoolLambdaConfigCustomSmsSenderToTerraform(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 {
        lambda_arn: cdktf.stringToTerraform(struct.lambdaArn),
        lambda_version: cdktf.stringToTerraform(struct.lambdaVersion),
    };
}
export class CognitoUserPoolLambdaConfigCustomSmsSenderOutputReference 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._lambdaArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambdaArn = this._lambdaArn;
        }
        if (this._lambdaVersion !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambdaVersion = this._lambdaVersion;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._lambdaArn = undefined;
            this._lambdaVersion = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._lambdaArn = value.lambdaArn;
            this._lambdaVersion = value.lambdaVersion;
        }
    }
    // lambda_arn - computed: false, optional: false, required: true
    _lambdaArn;
    get lambdaArn() {
        return this.getStringAttribute('lambda_arn');
    }
    set lambdaArn(value) {
        this._lambdaArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaArnInput() {
        return this._lambdaArn;
    }
    // lambda_version - computed: false, optional: false, required: true
    _lambdaVersion;
    get lambdaVersion() {
        return this.getStringAttribute('lambda_version');
    }
    set lambdaVersion(value) {
        this._lambdaVersion = value;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaVersionInput() {
        return this._lambdaVersion;
    }
}
export function cognitoUserPoolLambdaConfigToTerraform(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_auth_challenge: cdktf.stringToTerraform(struct.createAuthChallenge),
        custom_message: cdktf.stringToTerraform(struct.customMessage),
        define_auth_challenge: cdktf.stringToTerraform(struct.defineAuthChallenge),
        kms_key_id: cdktf.stringToTerraform(struct.kmsKeyId),
        post_authentication: cdktf.stringToTerraform(struct.postAuthentication),
        post_confirmation: cdktf.stringToTerraform(struct.postConfirmation),
        pre_authentication: cdktf.stringToTerraform(struct.preAuthentication),
        pre_sign_up: cdktf.stringToTerraform(struct.preSignUp),
        pre_token_generation: cdktf.stringToTerraform(struct.preTokenGeneration),
        user_migration: cdktf.stringToTerraform(struct.userMigration),
        verify_auth_challenge_response: cdktf.stringToTerraform(struct.verifyAuthChallengeResponse),
        custom_email_sender: cognitoUserPoolLambdaConfigCustomEmailSenderToTerraform(struct.customEmailSender),
        custom_sms_sender: cognitoUserPoolLambdaConfigCustomSmsSenderToTerraform(struct.customSmsSender),
    };
}
export class CognitoUserPoolLambdaConfigOutputReference 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._createAuthChallenge !== undefined) {
            hasAnyValues = true;
            internalValueResult.createAuthChallenge = this._createAuthChallenge;
        }
        if (this._customMessage !== undefined) {
            hasAnyValues = true;
            internalValueResult.customMessage = this._customMessage;
        }
        if (this._defineAuthChallenge !== undefined) {
            hasAnyValues = true;
            internalValueResult.defineAuthChallenge = this._defineAuthChallenge;
        }
        if (this._kmsKeyId !== undefined) {
            hasAnyValues = true;
            internalValueResult.kmsKeyId = this._kmsKeyId;
        }
        if (this._postAuthentication !== undefined) {
            hasAnyValues = true;
            internalValueResult.postAuthentication = this._postAuthentication;
        }
        if (this._postConfirmation !== undefined) {
            hasAnyValues = true;
            internalValueResult.postConfirmation = this._postConfirmation;
        }
        if (this._preAuthentication !== undefined) {
            hasAnyValues = true;
            internalValueResult.preAuthentication = this._preAuthentication;
        }
        if (this._preSignUp !== undefined) {
            hasAnyValues = true;
            internalValueResult.preSignUp = this._preSignUp;
        }
        if (this._preTokenGeneration !== undefined) {
            hasAnyValues = true;
            internalValueResult.preTokenGeneration = this._preTokenGeneration;
        }
        if (this._userMigration !== undefined) {
            hasAnyValues = true;
            internalValueResult.userMigration = this._userMigration;
        }
        if (this._verifyAuthChallengeResponse !== undefined) {
            hasAnyValues = true;
            internalValueResult.verifyAuthChallengeResponse = this._verifyAuthChallengeResponse;
        }
        if (this._customEmailSender?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.customEmailSender = this._customEmailSender?.internalValue;
        }
        if (this._customSmsSender?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.customSmsSender = this._customSmsSender?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._createAuthChallenge = undefined;
            this._customMessage = undefined;
            this._defineAuthChallenge = undefined;
            this._kmsKeyId = undefined;
            this._postAuthentication = undefined;
            this._postConfirmation = undefined;
            this._preAuthentication = undefined;
            this._preSignUp = undefined;
            this._preTokenGeneration = undefined;
            this._userMigration = undefined;
            this._verifyAuthChallengeResponse = undefined;
            this._customEmailSender.internalValue = undefined;
            this._customSmsSender.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._createAuthChallenge = value.createAuthChallenge;
            this._customMessage = value.customMessage;
            this._defineAuthChallenge = value.defineAuthChallenge;
            this._kmsKeyId = value.kmsKeyId;
            this._postAuthentication = value.postAuthentication;
            this._postConfirmation = value.postConfirmation;
            this._preAuthentication = value.preAuthentication;
            this._preSignUp = value.preSignUp;
            this._preTokenGeneration = value.preTokenGeneration;
            this._userMigration = value.userMigration;
            this._verifyAuthChallengeResponse = value.verifyAuthChallengeResponse;
            this._customEmailSender.internalValue = value.customEmailSender;
            this._customSmsSender.internalValue = value.customSmsSender;
        }
    }
    // create_auth_challenge - computed: false, optional: true, required: false
    _createAuthChallenge;
    get createAuthChallenge() {
        return this.getStringAttribute('create_auth_challenge');
    }
    set createAuthChallenge(value) {
        this._createAuthChallenge = value;
    }
    resetCreateAuthChallenge() {
        this._createAuthChallenge = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get createAuthChallengeInput() {
        return this._createAuthChallenge;
    }
    // custom_message - computed: false, optional: true, required: false
    _customMessage;
    get customMessage() {
        return this.getStringAttribute('custom_message');
    }
    set customMessage(value) {
        this._customMessage = value;
    }
    resetCustomMessage() {
        this._customMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customMessageInput() {
        return this._customMessage;
    }
    // define_auth_challenge - computed: false, optional: true, required: false
    _defineAuthChallenge;
    get defineAuthChallenge() {
        return this.getStringAttribute('define_auth_challenge');
    }
    set defineAuthChallenge(value) {
        this._defineAuthChallenge = value;
    }
    resetDefineAuthChallenge() {
        this._defineAuthChallenge = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defineAuthChallengeInput() {
        return this._defineAuthChallenge;
    }
    // kms_key_id - computed: false, optional: true, required: false
    _kmsKeyId;
    get kmsKeyId() {
        return this.getStringAttribute('kms_key_id');
    }
    set kmsKeyId(value) {
        this._kmsKeyId = value;
    }
    resetKmsKeyId() {
        this._kmsKeyId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kmsKeyIdInput() {
        return this._kmsKeyId;
    }
    // post_authentication - computed: false, optional: true, required: false
    _postAuthentication;
    get postAuthentication() {
        return this.getStringAttribute('post_authentication');
    }
    set postAuthentication(value) {
        this._postAuthentication = value;
    }
    resetPostAuthentication() {
        this._postAuthentication = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get postAuthenticationInput() {
        return this._postAuthentication;
    }
    // post_confirmation - computed: false, optional: true, required: false
    _postConfirmation;
    get postConfirmation() {
        return this.getStringAttribute('post_confirmation');
    }
    set postConfirmation(value) {
        this._postConfirmation = value;
    }
    resetPostConfirmation() {
        this._postConfirmation = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get postConfirmationInput() {
        return this._postConfirmation;
    }
    // pre_authentication - computed: false, optional: true, required: false
    _preAuthentication;
    get preAuthentication() {
        return this.getStringAttribute('pre_authentication');
    }
    set preAuthentication(value) {
        this._preAuthentication = value;
    }
    resetPreAuthentication() {
        this._preAuthentication = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get preAuthenticationInput() {
        return this._preAuthentication;
    }
    // pre_sign_up - computed: false, optional: true, required: false
    _preSignUp;
    get preSignUp() {
        return this.getStringAttribute('pre_sign_up');
    }
    set preSignUp(value) {
        this._preSignUp = value;
    }
    resetPreSignUp() {
        this._preSignUp = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get preSignUpInput() {
        return this._preSignUp;
    }
    // pre_token_generation - computed: false, optional: true, required: false
    _preTokenGeneration;
    get preTokenGeneration() {
        return this.getStringAttribute('pre_token_generation');
    }
    set preTokenGeneration(value) {
        this._preTokenGeneration = value;
    }
    resetPreTokenGeneration() {
        this._preTokenGeneration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get preTokenGenerationInput() {
        return this._preTokenGeneration;
    }
    // user_migration - computed: false, optional: true, required: false
    _userMigration;
    get userMigration() {
        return this.getStringAttribute('user_migration');
    }
    set userMigration(value) {
        this._userMigration = value;
    }
    resetUserMigration() {
        this._userMigration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get userMigrationInput() {
        return this._userMigration;
    }
    // verify_auth_challenge_response - computed: false, optional: true, required: false
    _verifyAuthChallengeResponse;
    get verifyAuthChallengeResponse() {
        return this.getStringAttribute('verify_auth_challenge_response');
    }
    set verifyAuthChallengeResponse(value) {
        this._verifyAuthChallengeResponse = value;
    }
    resetVerifyAuthChallengeResponse() {
        this._verifyAuthChallengeResponse = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get verifyAuthChallengeResponseInput() {
        return this._verifyAuthChallengeResponse;
    }
    // custom_email_sender - computed: false, optional: true, required: false
    _customEmailSender = new CognitoUserPoolLambdaConfigCustomEmailSenderOutputReference(this, "custom_email_sender", true);
    get customEmailSender() {
        return this._customEmailSender;
    }
    putCustomEmailSender(value) {
        this._customEmailSender.internalValue = value;
    }
    resetCustomEmailSender() {
        this._customEmailSender.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customEmailSenderInput() {
        return this._customEmailSender.internalValue;
    }
    // custom_sms_sender - computed: false, optional: true, required: false
    _customSmsSender = new CognitoUserPoolLambdaConfigCustomSmsSenderOutputReference(this, "custom_sms_sender", true);
    get customSmsSender() {
        return this._customSmsSender;
    }
    putCustomSmsSender(value) {
        this._customSmsSender.internalValue = value;
    }
    resetCustomSmsSender() {
        this._customSmsSender.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customSmsSenderInput() {
        return this._customSmsSender.internalValue;
    }
}
export function cognitoUserPoolPasswordPolicyToTerraform(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 {
        minimum_length: cdktf.numberToTerraform(struct.minimumLength),
        require_lowercase: cdktf.booleanToTerraform(struct.requireLowercase),
        require_numbers: cdktf.booleanToTerraform(struct.requireNumbers),
        require_symbols: cdktf.booleanToTerraform(struct.requireSymbols),
        require_uppercase: cdktf.booleanToTerraform(struct.requireUppercase),
        temporary_password_validity_days: cdktf.numberToTerraform(struct.temporaryPasswordValidityDays),
    };
}
export class CognitoUserPoolPasswordPolicyOutputReference 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._minimumLength !== undefined) {
            hasAnyValues = true;
            internalValueResult.minimumLength = this._minimumLength;
        }
        if (this._requireLowercase !== undefined) {
            hasAnyValues = true;
            internalValueResult.requireLowercase = this._requireLowercase;
        }
        if (this._requireNumbers !== undefined) {
            hasAnyValues = true;
            internalValueResult.requireNumbers = this._requireNumbers;
        }
        if (this._requireSymbols !== undefined) {
            hasAnyValues = true;
            internalValueResult.requireSymbols = this._requireSymbols;
        }
        if (this._requireUppercase !== undefined) {
            hasAnyValues = true;
            internalValueResult.requireUppercase = this._requireUppercase;
        }
        if (this._temporaryPasswordValidityDays !== undefined) {
            hasAnyValues = true;
            internalValueResult.temporaryPasswordValidityDays = this._temporaryPasswordValidityDays;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._minimumLength = undefined;
            this._requireLowercase = undefined;
            this._requireNumbers = undefined;
            this._requireSymbols = undefined;
            this._requireUppercase = undefined;
            this._temporaryPasswordValidityDays = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._minimumLength = value.minimumLength;
            this._requireLowercase = value.requireLowercase;
            this._requireNumbers = value.requireNumbers;
            this._requireSymbols = value.requireSymbols;
            this._requireUppercase = value.requireUppercase;
            this._temporaryPasswordValidityDays = value.temporaryPasswordValidityDays;
        }
    }
    // minimum_length - computed: false, optional: true, required: false
    _minimumLength;
    get minimumLength() {
        return this.getNumberAttribute('minimum_length');
    }
    set minimumLength(value) {
        this._minimumLength = value;
    }
    resetMinimumLength() {
        this._minimumLength = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minimumLengthInput() {
        return this._minimumLength;
    }
    // require_lowercase - computed: false, optional: true, required: false
    _requireLowercase;
    get requireLowercase() {
        return this.getBooleanAttribute('require_lowercase');
    }
    set requireLowercase(value) {
        this._requireLowercase = value;
    }
    resetRequireLowercase() {
        this._requireLowercase = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requireLowercaseInput() {
        return this._requireLowercase;
    }
    // require_numbers - computed: false, optional: true, required: false
    _requireNumbers;
    get requireNumbers() {
        return this.getBooleanAttribute('require_numbers');
    }
    set requireNumbers(value) {
        this._requireNumbers = value;
    }
    resetRequireNumbers() {
        this._requireNumbers = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requireNumbersInput() {
        return this._requireNumbers;
    }
    // require_symbols - computed: false, optional: true, required: false
    _requireSymbols;
    get requireSymbols() {
        return this.getBooleanAttribute('require_symbols');
    }
    set requireSymbols(value) {
        this._requireSymbols = value;
    }
    resetRequireSymbols() {
        this._requireSymbols = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requireSymbolsInput() {
        return this._requireSymbols;
    }
    // require_uppercase - computed: false, optional: true, required: false
    _requireUppercase;
    get requireUppercase() {
        return this.getBooleanAttribute('require_uppercase');
    }
    set requireUppercase(value) {
        this._requireUppercase = value;
    }
    resetRequireUppercase() {
        this._requireUppercase = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requireUppercaseInput() {
        return this._requireUppercase;
    }
    // temporary_password_validity_days - computed: false, optional: true, required: false
    _temporaryPasswordValidityDays;
    get temporaryPasswordValidityDays() {
        return this.getNumberAttribute('temporary_password_validity_days');
    }
    set temporaryPasswordValidityDays(value) {
        this._temporaryPasswordValidityDays = value;
    }
    resetTemporaryPasswordValidityDays() {
        this._temporaryPasswordValidityDays = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get temporaryPasswordValidityDaysInput() {
        return this._temporaryPasswordValidityDays;
    }
}
export function cognitoUserPoolSchemaNumberAttributeConstraintsToTerraform(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 {
        max_value: cdktf.stringToTerraform(struct.maxValue),
        min_value: cdktf.stringToTerraform(struct.minValue),
    };
}
export class CognitoUserPoolSchemaNumberAttributeConstraintsOutputReference 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._maxValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.maxValue = this._maxValue;
        }
        if (this._minValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.minValue = this._minValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._maxValue = undefined;
            this._minValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._maxValue = value.maxValue;
            this._minValue = value.minValue;
        }
    }
    // max_value - computed: false, optional: true, required: false
    _maxValue;
    get maxValue() {
        return this.getStringAttribute('max_value');
    }
    set maxValue(value) {
        this._maxValue = value;
    }
    resetMaxValue() {
        this._maxValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maxValueInput() {
        return this._maxValue;
    }
    // min_value - computed: false, optional: true, required: false
    _minValue;
    get minValue() {
        return this.getStringAttribute('min_value');
    }
    set minValue(value) {
        this._minValue = value;
    }
    resetMinValue() {
        this._minValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minValueInput() {
        return this._minValue;
    }
}
export function cognitoUserPoolSchemaStringAttributeConstraintsToTerraform(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 {
        max_length: cdktf.stringToTerraform(struct.maxLength),
        min_length: cdktf.stringToTerraform(struct.minLength),
    };
}
export class CognitoUserPoolSchemaStringAttributeConstraintsOutputReference 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._maxLength !== undefined) {
            hasAnyValues = true;
            internalValueResult.maxLength = this._maxLength;
        }
        if (this._minLength !== undefined) {
            hasAnyValues = true;
            internalValueResult.minLength = this._minLength;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._maxLength = undefined;
            this._minLength = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._maxLength = value.maxLength;
            this._minLength = value.minLength;
        }
    }
    // max_length - computed: false, optional: true, required: false
    _maxLength;
    get maxLength() {
        return this.getStringAttribute('max_length');
    }
    set maxLength(value) {
        this._maxLength = value;
    }
    resetMaxLength() {
        this._maxLength = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maxLengthInput() {
        return this._maxLength;
    }
    // min_length - computed: false, optional: true, required: false
    _minLength;
    get minLength() {
        return this.getStringAttribute('min_length');
    }
    set minLength(value) {
        this._minLength = value;
    }
    resetMinLength() {
        this._minLength = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minLengthInput() {
        return this._minLength;
    }
}
export function cognitoUserPoolSchemaToTerraform(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 {
        attribute_data_type: cdktf.stringToTerraform(struct.attributeDataType),
        developer_only_attribute: cdktf.booleanToTerraform(struct.developerOnlyAttribute),
        mutable: cdktf.booleanToTerraform(struct.mutable),
        name: cdktf.stringToTerraform(struct.name),
        required: cdktf.booleanToTerraform(struct.required),
        number_attribute_constraints: cognitoUserPoolSchemaNumberAttributeConstraintsToTerraform(struct.numberAttributeConstraints),
        string_attribute_constraints: cognitoUserPoolSchemaStringAttributeConstraintsToTerraform(struct.stringAttributeConstraints),
    };
}
export function cognitoUserPoolSmsConfigurationToTerraform(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 {
        external_id: cdktf.stringToTerraform(struct.externalId),
        sns_caller_arn: cdktf.stringToTerraform(struct.snsCallerArn),
    };
}
export class CognitoUserPoolSmsConfigurationOutputReference 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._externalId !== undefined) {
            hasAnyValues = true;
            internalValueResult.externalId = this._externalId;
        }
        if (this._snsCallerArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.snsCallerArn = this._snsCallerArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._externalId = undefined;
            this._snsCallerArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._externalId = value.externalId;
            this._snsCallerArn = value.snsCallerArn;
        }
    }
    // external_id - computed: false, optional: false, required: true
    _externalId;
    get externalId() {
        return this.getStringAttribute('external_id');
    }
    set externalId(value) {
        this._externalId = value;
    }
    // Temporarily expose input value. Use with caution.
    get externalIdInput() {
        return this._externalId;
    }
    // sns_caller_arn - computed: false, optional: false, required: true
    _snsCallerArn;
    get snsCallerArn() {
        return this.getStringAttribute('sns_caller_arn');
    }
    set snsCallerArn(value) {
        this._snsCallerArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get snsCallerArnInput() {
        return this._snsCallerArn;
    }
}
export function cognitoUserPoolSoftwareTokenMfaConfigurationToTerraform(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 {
        enabled: cdktf.booleanToTerraform(struct.enabled),
    };
}
export class CognitoUserPoolSoftwareTokenMfaConfigurationOutputReference 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._enabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabled = this._enabled;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._enabled = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._enabled = value.enabled;
        }
    }
    // enabled - computed: false, optional: false, required: true
    _enabled;
    get enabled() {
        return this.getBooleanAttribute('enabled');
    }
    set enabled(value) {
        this._enabled = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInput() {
        return this._enabled;
    }
}
export function cognitoUserPoolUserPoolAddOnsToTerraform(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 {
        advanced_security_mode: cdktf.stringToTerraform(struct.advancedSecurityMode),
    };
}
export class CognitoUserPoolUserPoolAddOnsOutputReference 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._advancedSecurityMode !== undefined) {
            hasAnyValues = true;
            internalValueResult.advancedSecurityMode = this._advancedSecurityMode;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._advancedSecurityMode = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._advancedSecurityMode = value.advancedSecurityMode;
        }
    }
    // advanced_security_mode - computed: false, optional: false, required: true
    _advancedSecurityMode;
    get advancedSecurityMode() {
        return this.getStringAttribute('advanced_security_mode');
    }
    set advancedSecurityMode(value) {
        this._advancedSecurityMode = value;
    }
    // Temporarily expose input value. Use with caution.
    get advancedSecurityModeInput() {
        return this._advancedSecurityMode;
    }
}
export function cognitoUserPoolUsernameConfigurationToTerraform(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 {
        case_sensitive: cdktf.booleanToTerraform(struct.caseSensitive),
    };
}
export class CognitoUserPoolUsernameConfigurationOutputReference 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._caseSensitive !== undefined) {
            hasAnyValues = true;
            internalValueResult.caseSensitive = this._caseSensitive;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._caseSensitive = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._caseSensitive = value.caseSensitive;
        }
    }
    // case_sensitive - computed: false, optional: false, required: true
    _caseSensitive;
    get caseSensitive() {
        return this.getBooleanAttribute('case_sensitive');
    }
    set caseSensitive(value) {
        this._caseSensitive = value;
    }
    // Temporarily expose input value. Use with caution.
    get caseSensitiveInput() {
        return this._caseSensitive;
    }
}
export function cognitoUserPoolVerificationMessageTemplateToTerraform(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 {
        default_email_option: cdktf.stringToTerraform(struct.defaultEmailOption),
        email_message: cdktf.stringToTerraform(struct.emailMessage),
        email_message_by_link: cdktf.stringToTerraform(struct.emailMessageByLink),
        email_subject: cdktf.stringToTerraform(struct.emailSubject),
        email_subject_by_link: cdktf.stringToTerraform(struct.emailSubjectByLink),
        sms_message: cdktf.stringToTerraform(struct.smsMessage),
    };
}
export class CognitoUserPoolVerificationMessageTemplateOutputReference 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._defaultEmailOption !== undefined) {
            hasAnyValues = true;
            internalValueResult.defaultEmailOption = this._defaultEmailOption;
        }
        if (this._emailMessage !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailMessage = this._emailMessage;
        }
        if (this._emailMessageByLink !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailMessageByLink = this._emailMessageByLink;
        }
        if (this._emailSubject !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailSubject = this._emailSubject;
        }
        if (this._emailSubjectByLink !== undefined) {
            hasAnyValues = true;
            internalValueResult.emailSubjectByLink = this._emailSubjectByLink;
        }
        if (this._smsMessage !== undefined) {
            hasAnyValues = true;
            internalValueResult.smsMessage = this._smsMessage;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._defaultEmailOption = undefined;
            this._emailMessage = undefined;
            this._emailMessageByLink = undefined;
            this._emailSubject = undefined;
            this._emailSubjectByLink = undefined;
            this._smsMessage = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._defaultEmailOption = value.defaultEmailOption;
            this._emailMessage = value.emailMessage;
            this._emailMessageByLink = value.emailMessageByLink;
            this._emailSubject = value.emailSubject;
            this._emailSubjectByLink = value.emailSubjectByLink;
            this._smsMessage = value.smsMessage;
        }
    }
    // default_email_option - computed: false, optional: true, required: false
    _defaultEmailOption;
    get defaultEmailOption() {
        return this.getStringAttribute('default_email_option');
    }
    set defaultEmailOption(value) {
        this._defaultEmailOption = value;
    }
    resetDefaultEmailOption() {
        this._defaultEmailOption = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultEmailOptionInput() {
        return this._defaultEmailOption;
    }
    // email_message - computed: true, optional: true, required: false
    _emailMessage;
    get emailMessage() {
        return this.getStringAttribute('email_message');
    }
    set emailMessage(value) {
        this._emailMessage = value;
    }
    resetEmailMessage() {
        this._emailMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailMessageInput() {
        return this._emailMessage;
    }
    // email_message_by_link - computed: true, optional: true, required: false
    _emailMessageByLink;
    get emailMessageByLink() {
        return this.getStringAttribute('email_message_by_link');
    }
    set emailMessageByLink(value) {
        this._emailMessageByLink = value;
    }
    resetEmailMessageByLink() {
        this._emailMessageByLink = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailMessageByLinkInput() {
        return this._emailMessageByLink;
    }
    // email_subject - computed: true, optional: true, required: false
    _emailSubject;
    get emailSubject() {
        return this.getStringAttribute('email_subject');
    }
    set emailSubject(value) {
        this._emailSubject = value;
    }
    resetEmailSubject() {
        this._emailSubject = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailSubjectInput() {
        return this._emailSubject;
    }
    // email_subject_by_link - computed: true, optional: true, required: false
    _emailSubjectByLink;
    get emailSubjectByLink() {
        return this.getStringAttribute('email_subject_by_link');
    }
    set emailSubjectByLink(value) {
        this._emailSubjectByLink = value;
    }
    resetEmailSubjectByLink() {
        this._emailSubjectByLink = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailSubjectByLinkInput() {
        return this._emailSubjectByLink;
    }
    // sms_message - computed: true, optional: true, required: false
    _smsMessage;
    get smsMessage() {
        return this.getStringAttribute('sms_message');
    }
    set smsMessage(value) {
        this._smsMessage = value;
    }
    resetSmsMessage() {
        this._smsMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smsMessageInput() {
        return this._smsMessage;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/cognito_user_pool aws_cognito_user_pool}
*/
export class CognitoUserPool extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_cognito_user_pool";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/cognito_user_pool aws_cognito_user_pool} 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 CognitoUserPoolConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_cognito_user_pool',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._aliasAttributes = config.aliasAttributes;
        this._autoVerifiedAttributes = config.autoVerifiedAttributes;
        this._emailVerificationMessage = config.emailVerificationMessage;
        this._emailVerificationSubject = config.emailVerificationSubject;
        this._mfaConfiguration = config.mfaConfiguration;
        this._name = config.name;
        this._smsAuthenticationMessage = config.smsAuthenticationMessage;
        this._smsVerificationMessage = config.smsVerificationMessage;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._usernameAttributes = config.usernameAttributes;
        this._accountRecoverySetting.internalValue = config.accountRecoverySetting;
        this._adminCreateUserConfig.internalValue = config.adminCreateUserConfig;
        this._deviceConfiguration.internalValue = config.deviceConfiguration;
        this._emailConfiguration.internalValue = config.emailConfiguration;
        this._lambdaConfig.internalValue = config.lambdaConfig;
        this._passwordPolicy.internalValue = config.passwordPolicy;
        this._schema = config.schema;
        this._smsConfiguration.internalValue = config.smsConfiguration;
        this._softwareTokenMfaConfiguration.internalValue = config.softwareTokenMfaConfiguration;
        this._userPoolAddOns.internalValue = config.userPoolAddOns;
        this._usernameConfiguration.internalValue = config.usernameConfiguration;
        this._verificationMessageTemplate.internalValue = config.verificationMessageTemplate;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // alias_attributes - computed: false, optional: true, required: false
    _aliasAttributes;
    get aliasAttributes() {
        return cdktf.Fn.tolist(this.getListAttribute('alias_attributes'));
    }
    set aliasAttributes(value) {
        this._aliasAttributes = value;
    }
    resetAliasAttributes() {
        this._aliasAttributes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get aliasAttributesInput() {
        return this._aliasAttributes;
    }
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // auto_verified_attributes - computed: false, optional: true, required: false
    _autoVerifiedAttributes;
    get autoVerifiedAttributes() {
        return cdktf.Fn.tolist(this.getListAttribute('auto_verified_attributes'));
    }
    set autoVerifiedAttributes(value) {
        this._autoVerifiedAttributes = value;
    }
    resetAutoVerifiedAttributes() {
        this._autoVerifiedAttributes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get autoVerifiedAttributesInput() {
        return this._autoVerifiedAttributes;
    }
    // creation_date - computed: true, optional: false, required: false
    get creationDate() {
        return this.getStringAttribute('creation_date');
    }
    // custom_domain - computed: true, optional: false, required: false
    get customDomain() {
        return this.getStringAttribute('custom_domain');
    }
    // domain - computed: true, optional: false, required: false
    get domain() {
        return this.getStringAttribute('domain');
    }
    // email_verification_message - computed: true, optional: true, required: false
    _emailVerificationMessage;
    get emailVerificationMessage() {
        return this.getStringAttribute('email_verification_message');
    }
    set emailVerificationMessage(value) {
        this._emailVerificationMessage = value;
    }
    resetEmailVerificationMessage() {
        this._emailVerificationMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailVerificationMessageInput() {
        return this._emailVerificationMessage;
    }
    // email_verification_subject - computed: true, optional: true, required: false
    _emailVerificationSubject;
    get emailVerificationSubject() {
        return this.getStringAttribute('email_verification_subject');
    }
    set emailVerificationSubject(value) {
        this._emailVerificationSubject = value;
    }
    resetEmailVerificationSubject() {
        this._emailVerificationSubject = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailVerificationSubjectInput() {
        return this._emailVerificationSubject;
    }
    // endpoint - computed: true, optional: false, required: false
    get endpoint() {
        return this.getStringAttribute('endpoint');
    }
    // estimated_number_of_users - computed: true, optional: false, required: false
    get estimatedNumberOfUsers() {
        return this.getNumberAttribute('estimated_number_of_users');
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // last_modified_date - computed: true, optional: false, required: false
    get lastModifiedDate() {
        return this.getStringAttribute('last_modified_date');
    }
    // mfa_configuration - computed: false, optional: true, required: false
    _mfaConfiguration;
    get mfaConfiguration() {
        return this.getStringAttribute('mfa_configuration');
    }
    set mfaConfiguration(value) {
        this._mfaConfiguration = value;
    }
    resetMfaConfiguration() {
        this._mfaConfiguration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mfaConfigurationInput() {
        return this._mfaConfiguration;
    }
    // name - computed: false, optional: false, required: true
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // sms_authentication_message - computed: false, optional: true, required: false
    _smsAuthenticationMessage;
    get smsAuthenticationMessage() {
        return this.getStringAttribute('sms_authentication_message');
    }
    set smsAuthenticationMessage(value) {
        this._smsAuthenticationMessage = value;
    }
    resetSmsAuthenticationMessage() {
        this._smsAuthenticationMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smsAuthenticationMessageInput() {
        return this._smsAuthenticationMessage;
    }
    // sms_verification_message - computed: true, optional: true, required: false
    _smsVerificationMessage;
    get smsVerificationMessage() {
        return this.getStringAttribute('sms_verification_message');
    }
    set smsVerificationMessage(value) {
        this._smsVerificationMessage = value;
    }
    resetSmsVerificationMessage() {
        this._smsVerificationMessage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smsVerificationMessageInput() {
        return this._smsVerificationMessage;
    }
    // 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;
    }
    // username_attributes - computed: false, optional: true, required: false
    _usernameAttributes;
    get usernameAttributes() {
        return cdktf.Fn.tolist(this.getListAttribute('username_attributes'));
    }
    set usernameAttributes(value) {
        this._usernameAttributes = value;
    }
    resetUsernameAttributes() {
        this._usernameAttributes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get usernameAttributesInput() {
        return this._usernameAttributes;
    }
    // account_recovery_setting - computed: false, optional: true, required: false
    _accountRecoverySetting = new CognitoUserPoolAccountRecoverySettingOutputReference(this, "account_recovery_setting", true);
    get accountRecoverySetting() {
        return this._accountRecoverySetting;
    }
    putAccountRecoverySetting(value) {
        this._accountRecoverySetting.internalValue = value;
    }
    resetAccountRecoverySetting() {
        this._accountRecoverySetting.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get accountRecoverySettingInput() {
        return this._accountRecoverySetting.internalValue;
    }
    // admin_create_user_config - computed: false, optional: true, required: false
    _adminCreateUserConfig = new CognitoUserPoolAdminCreateUserConfigOutputReference(this, "admin_create_user_config", true);
    get adminCreateUserConfig() {
        return this._adminCreateUserConfig;
    }
    putAdminCreateUserConfig(value) {
        this._adminCreateUserConfig.internalValue = value;
    }
    resetAdminCreateUserConfig() {
        this._adminCreateUserConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get adminCreateUserConfigInput() {
        return this._adminCreateUserConfig.internalValue;
    }
    // device_configuration - computed: false, optional: true, required: false
    _deviceConfiguration = new CognitoUserPoolDeviceConfigurationOutputReference(this, "device_configuration", true);
    get deviceConfiguration() {
        return this._deviceConfiguration;
    }
    putDeviceConfiguration(value) {
        this._deviceConfiguration.internalValue = value;
    }
    resetDeviceConfiguration() {
        this._deviceConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceConfigurationInput() {
        return this._deviceConfiguration.internalValue;
    }
    // email_configuration - computed: false, optional: true, required: false
    _emailConfiguration = new CognitoUserPoolEmailConfigurationOutputReference(this, "email_configuration", true);
    get emailConfiguration() {
        return this._emailConfiguration;
    }
    putEmailConfiguration(value) {
        this._emailConfiguration.internalValue = value;
    }
    resetEmailConfiguration() {
        this._emailConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get emailConfigurationInput() {
        return this._emailConfiguration.internalValue;
    }
    // lambda_config - computed: false, optional: true, required: false
    _lambdaConfig = new CognitoUserPoolLambdaConfigOutputReference(this, "lambda_config", true);
    get lambdaConfig() {
        return this._lambdaConfig;
    }
    putLambdaConfig(value) {
        this._lambdaConfig.internalValue = value;
    }
    resetLambdaConfig() {
        this._lambdaConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaConfigInput() {
        return this._lambdaConfig.internalValue;
    }
    // password_policy - computed: false, optional: true, required: false
    _passwordPolicy = new CognitoUserPoolPasswordPolicyOutputReference(this, "password_policy", true);
    get passwordPolicy() {
        return this._passwordPolicy;
    }
    putPasswordPolicy(value) {
        this._passwordPolicy.internalValue = value;
    }
    resetPasswordPolicy() {
        this._passwordPolicy.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get passwordPolicyInput() {
        return this._passwordPolicy.internalValue;
    }
    // schema - computed: false, optional: true, required: false
    _schema;
    get schema() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('schema')));
    }
    set schema(value) {
        this._schema = value;
    }
    resetSchema() {
        this._schema = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaInput() {
        return this._schema;
    }
    // sms_configuration - computed: false, optional: true, required: false
    _smsConfiguration = new CognitoUserPoolSmsConfigurationOutputReference(this, "sms_configuration", true);
    get smsConfiguration() {
        return this._smsConfiguration;
    }
    putSmsConfiguration(value) {
        this._smsConfiguration.internalValue = value;
    }
    resetSmsConfiguration() {
        this._smsConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smsConfigurationInput() {
        return this._smsConfiguration.internalValue;
    }
    // software_token_mfa_configuration - computed: false, optional: true, required: false
    _softwareTokenMfaConfiguration = new CognitoUserPoolSoftwareTokenMfaConfigurationOutputReference(this, "software_token_mfa_configuration", true);
    get softwareTokenMfaConfiguration() {
        return this._softwareTokenMfaConfiguration;
    }
    putSoftwareTokenMfaConfiguration(value) {
        this._softwareTokenMfaConfiguration.internalValue = value;
    }
    resetSoftwareTokenMfaConfiguration() {
        this._softwareTokenMfaConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get softwareTokenMfaConfigurationInput() {
        return this._softwareTokenMfaConfiguration.internalValue;
    }
    // user_pool_add_ons - computed: false, optional: true, required: false
    _userPoolAddOns = new CognitoUserPoolUserPoolAddOnsOutputReference(this, "user_pool_add_ons", true);
    get userPoolAddOns() {
        return this._userPoolAddOns;
    }
    putUserPoolAddOns(value) {
        this._userPoolAddOns.internalValue = value;
    }
    resetUserPoolAddOns() {
        this._userPoolAddOns.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get userPoolAddOnsInput() {
        return this._userPoolAddOns.internalValue;
    }
    // username_configuration - computed: false, optional: true, required: false
    _usernameConfiguration = new CognitoUserPoolUsernameConfigurationOutputReference(this, "username_configuration", true);
    get usernameConfiguration() {
        return this._usernameConfiguration;
    }
    putUsernameConfiguration(value) {
        this._usernameConfiguration.internalValue = value;
    }
    resetUsernameConfiguration() {
        this._usernameConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get usernameConfigurationInput() {
        return this._usernameConfiguration.internalValue;
    }
    // verification_message_template - computed: false, optional: true, required: false
    _verificationMessageTemplate = new CognitoUserPoolVerificationMessageTemplateOutputReference(this, "verification_message_template", true);
    get verificationMessageTemplate() {
        return this._verificationMessageTemplate;
    }
    putVerificationMessageTemplate(value) {
        this._verificationMessageTemplate.internalValue = value;
    }
    resetVerificationMessageTemplate() {
        this._verificationMessageTemplate.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get verificationMessageTemplateInput() {
        return this._verificationMessageTemplate.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            alias_attributes: cdktf.listMapper(cdktf.stringToTerraform)(this._aliasAttributes),
            auto_verified_attributes: cdktf.listMapper(cdktf.stringToTerraform)(this._autoVerifiedAttributes),
            email_verification_message: cdktf.stringToTerraform(this._emailVerificationMessage),
            email_verification_subject: cdktf.stringToTerraform(this._emailVerificationSubject),
            mfa_configuration: cdktf.stringToTerraform(this._mfaConfiguration),
            name: cdktf.stringToTerraform(this._name),
            sms_authentication_message: cdktf.stringToTerraform(this._smsAuthenticationMessage),
            sms_verification_message: cdktf.stringToTerraform(this._smsVerificationMessage),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            username_attributes: cdktf.listMapper(cdktf.stringToTerraform)(this._usernameAttributes),
            account_recovery_setting: cognitoUserPoolAccountRecoverySettingToTerraform(this._accountRecoverySetting.internalValue),
            admin_create_user_config: cognitoUserPoolAdminCreateUserConfigToTerraform(this._adminCreateUserConfig.internalValue),
            device_configuration: cognitoUserPoolDeviceConfigurationToTerraform(this._deviceConfiguration.internalValue),
            email_configuration: cognitoUserPoolEmailConfigurationToTerraform(this._emailConfiguration.internalValue),
            lambda_config: cognitoUserPoolLambdaConfigToTerraform(this._lambdaConfig.internalValue),
            password_policy: cognitoUserPoolPasswordPolicyToTerraform(this._passwordPolicy.internalValue),
            schema: cdktf.listMapper(cognitoUserPoolSchemaToTerraform)(this._schema),
            sms_configuration: cognitoUserPoolSmsConfigurationToTerraform(this._smsConfiguration.internalValue),
            software_token_mfa_configuration: cognitoUserPoolSoftwareTokenMfaConfigurationToTerraform(this._softwareTokenMfaConfiguration.internalValue),
            user_pool_add_ons: cognitoUserPoolUserPoolAddOnsToTerraform(this._userPoolAddOns.internalValue),
            username_configuration: cognitoUserPoolUsernameConfigurationToTerraform(this._usernameConfiguration.internalValue),
            verification_message_template: cognitoUserPoolVerificationMessageTemplateToTerraform(this._verificationMessageTemplate.internalValue),
        };
    }
}
//# sourceMappingURL=cognito-user-pool.js.map