"""
Autogenerated state module using `pop-create-idem <https://gitlab.com/saltstack/pop/pop-create-idem>`__

hub.exec.boto3.client.quicksight.delete_user
hub.exec.boto3.client.quicksight.describe_user
hub.exec.boto3.client.quicksight.list_users
hub.exec.boto3.client.quicksight.register_user
hub.exec.boto3.client.quicksight.update_user
"""



from typing import *
import dict_tools.differ as differ
async def present(hub, ctx, name: Text, identity_type: Text, email: Text, user_role: Text, aws_account_id: Text, namespace: Text, iam_arn: Text = None, session_name: Text = None, user_name: Text = None, custom_permissions_name: Text = None, external_login_federation_provider_type: Text = None, custom_federation_provider_url: Text = None, external_login_id: Text = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Creates an Amazon QuickSight user, whose identity is associated with the AWS Identity and Access Management
    (IAM) identity or role specified in the request.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        identity_type(Text): Amazon QuickSight supports several ways of managing the identity of users. This parameter
            accepts two values:    IAM: A user whose identity maps to an existing IAM user or role.
            QUICKSIGHT: A user whose identity is owned and managed internally by Amazon QuickSight.
        email(Text): The email address of the user that you want to register.
        user_role(Text): The Amazon QuickSight role for the user. The user role can be one of the following:    READER: A
            user who has read-only access to dashboards.    AUTHOR: A user who can create data sources,
            datasets, analyses, and dashboards.    ADMIN: A user who is an author, who can also manage
            Amazon QuickSight settings.    RESTRICTED_READER: This role isn't currently available for use.
            RESTRICTED_AUTHOR: This role isn't currently available for use.
        iam_arn(Text, optional): The ARN of the IAM user or role that you are registering with Amazon QuickSight. Defaults to None.
        session_name(Text, optional): You need to use this parameter only when you register one or more users using an assumed IAM
            role. You don't need to provide the session name for other scenarios, for example when you are
            registering an IAM user or an Amazon QuickSight user. You can register multiple users using the
            same IAM role if each user has a different session name. For more information on assuming IAM
            roles, see  assume-role  in the AWS CLI Reference. Defaults to None.
        aws_account_id(Text): The ID for the Amazon Web Services account; that the user is in. Currently, you use the ID for
            the Amazon Web Services account; that contains your Amazon QuickSight account.
        namespace(Text): The namespace. Currently, you should set this to default.
        user_name(Text, optional): The Amazon QuickSight user name that you want to create for the user you are registering. Defaults to None.
        custom_permissions_name(Text, optional): (Enterprise edition only) The name of the custom permissions profile that you want to assign to
            this user. Customized permissions allows you to control a user's access by restricting access
            the following operations:   Create and update data sources   Create and update datasets   Create
            and update email reports   Subscribe to email reports   To add custom permissions to an existing
            user, use  UpdateUser  instead. A set of custom permissions includes any combination of these
            restrictions. Currently, you need to create the profile names for custom permission sets by
            using the QuickSight console. Then, you use the RegisterUser API operation to assign the named
            set of permissions to a QuickSight user.  QuickSight custom permissions are applied through IAM
            policies. Therefore, they override the permissions typically granted by assigning QuickSight
            users to one of the default security cohorts in QuickSight (admin, author, reader). This feature
            is available only to QuickSight Enterprise edition subscriptions. Defaults to None.
        external_login_federation_provider_type(Text, optional): The type of supported external login provider that provides identity to let a user federate into
            Amazon QuickSight with an associated AWS Identity and Access Management (IAM) role. The type of
            supported external login provider can be one of the following.    COGNITO: Amazon Cognito. The
            provider URL is cognito-identity.amazonaws.com. When choosing the COGNITO provider type, don’t
            use the "CustomFederationProviderUrl" parameter which is only needed when the external provider
            is custom.    CUSTOM_OIDC: Custom OpenID Connect (OIDC) provider. When choosing CUSTOM_OIDC
            type, use the CustomFederationProviderUrl parameter to provide the custom OIDC provider URL. Defaults to None.
        custom_federation_provider_url(Text, optional): The URL of the custom OpenID Connect (OIDC) provider that provides identity to let a user
            federate into QuickSight with an associated AWS Identity and Access Management (IAM) role. This
            parameter should only be used when ExternalLoginFederationProviderType parameter is set to
            CUSTOM_OIDC. Defaults to None.
        external_login_id(Text, optional): The identity ID for a user in the external login provider. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_present:
              aws_auto.quicksight.user.present:
                - name: value
                - identity_type: value
                - email: value
                - user_role: value
                - aws_account_id: value
                - namespace: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.quicksight.user.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    
    before = await hub.exec.boto3.client.quicksight.describe_user(name)

    if before:
        result["comment"] = f"'{name}' already exists"
    else:
        try:
            ret = await hub.exec.boto3.client.quicksight.register_user(
                ctx,
                
                
                **{"IdentityType": identity_type, "Email": email, "UserRole": user_role, "IamArn": iam_arn, "SessionName": session_name, "AwsAccountId": aws_account_id, "Namespace": namespace, "UserName": user_name, "CustomPermissionsName": custom_permissions_name, "ExternalLoginFederationProviderType": external_login_federation_provider_type, "CustomFederationProviderUrl": custom_federation_provider_url, "ExternalLoginId": external_login_id}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            ret["comment"] = f"Created '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    
    # TODO perform other modifications as needed here
    ...

    after = await hub.exec.boto3.client.quicksight.describe_user(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

async def absent(hub, ctx, name: Text, user_name: Text, aws_account_id: Text, namespace: Text)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Deletes the Amazon QuickSight user that is associated with the identity of the Identity and Access Management
    (IAM) user or role that's making the call. The IAM user isn't deleted as a result of this call.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        user_name(Text): The name of the user that you want to delete.
        aws_account_id(Text): The ID for the Amazon Web Services account; that the user is in. Currently, you use the ID for
            the Amazon Web Services account; that contains your Amazon QuickSight account.
        namespace(Text): The namespace. Currently, you should set this to default.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_absent:
              aws_auto.quicksight.user.absent:
                - name: value
                - user_name: value
                - aws_account_id: value
                - namespace: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.quicksight.user.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    

    before = await hub.exec.boto3.client.quicksight.describe_user(name)

    if not before:
        result["comment"] = f"'{name}' already absent"
    else:
        try:
            ret = await hub.exec.boto3.client.quicksight.delete_user(
                ctx,
                
                
                **{"UserName": user_name, "AwsAccountId": aws_account_id, "Namespace": namespace}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            result["comment"] = f"Deleted '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    

    after = await hub.exec.boto3.client.quicksight.describe_user(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

