# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import integer


class MofNApprovalStrategy(AWSProperty):
    """
    `MofNApprovalStrategy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-approvalteam-mofnapprovalstrategy.html>`__
    """

    props: PropsDictType = {
        "MinApprovalsRequired": (integer, True),
    }


class ApprovalStrategy(AWSProperty):
    """
    `ApprovalStrategy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-approvalteam-approvalstrategy.html>`__
    """

    props: PropsDictType = {
        "MofN": (MofNApprovalStrategy, True),
    }


class Approver(AWSProperty):
    """
    `Approver <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-approvalteam-approver.html>`__
    """

    props: PropsDictType = {
        "ApproverId": (str, False),
        "PrimaryIdentityId": (str, True),
        "PrimaryIdentitySourceArn": (str, True),
        "PrimaryIdentityStatus": (str, False),
        "ResponseTime": (str, False),
    }


class Policy(AWSProperty):
    """
    `Policy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-approvalteam-policy.html>`__
    """

    props: PropsDictType = {
        "PolicyArn": (str, True),
    }


class ApprovalTeam(AWSObject):
    """
    `ApprovalTeam <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mpa-approvalteam.html>`__
    """

    resource_type = "AWS::MPA::ApprovalTeam"

    props: PropsDictType = {
        "ApprovalStrategy": (ApprovalStrategy, True),
        "Approvers": ([Approver], True),
        "Description": (str, True),
        "Name": (str, True),
        "Policies": ([Policy], True),
        "Tags": (Tags, False),
    }


class IamIdentityCenter(AWSProperty):
    """
    `IamIdentityCenter <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-identitysource-iamidentitycenter.html>`__
    """

    props: PropsDictType = {
        "ApprovalPortalUrl": (str, False),
        "InstanceArn": (str, True),
        "Region": (str, True),
    }


class IdentitySourceParameters(AWSProperty):
    """
    `IdentitySourceParameters <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mpa-identitysource-identitysourceparameters.html>`__
    """

    props: PropsDictType = {
        "IamIdentityCenter": (IamIdentityCenter, True),
    }


class IdentitySource(AWSObject):
    """
    `IdentitySource <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mpa-identitysource.html>`__
    """

    resource_type = "AWS::MPA::IdentitySource"

    props: PropsDictType = {
        "IdentitySourceParameters": (IdentitySourceParameters, True),
        "Tags": (Tags, False),
    }
