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

hub.exec.boto3.client.ecs.delete_account_setting
hub.exec.boto3.client.ecs.list_account_settings
hub.exec.boto3.client.ecs.put_account_setting
"""



from typing import *
import dict_tools.differ as differ
async def present(hub, ctx, name: Text, value: Text, principal_arn: Text = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Modifies an account setting. Account settings are set on a per-Region basis. If you change the account setting
    for the root user, the default settings for all of the IAM users and roles for which no individual account
    setting has been specified are reset. For more information, see Account Settings in the Amazon Elastic Container
    Service Developer Guide. When serviceLongArnFormat, taskLongArnFormat, or containerInstanceLongArnFormat are
    specified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified IAM user,
    IAM role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for
    each Amazon ECS resource separately. The ARN and resource ID format of a resource will be defined by the opt-in
    status of the IAM user or role that created the resource. You must enable this setting to use Amazon ECS
    features such as resource tagging. When awsvpcTrunking is specified, the elastic network interface (ENI) limit
    for any new container instances that support the feature is changed. If awsvpcTrunking is enabled, any new
    container instances that support the feature are launched have the increased ENI limits available to them. For
    more information, see Elastic Network Interface Trunking in the Amazon Elastic Container Service Developer
    Guide. When containerInsights is specified, the default setting indicating whether CloudWatch Container Insights
    is enabled for your clusters is changed. If containerInsights is enabled, any new clusters that are created will
    have Container Insights enabled unless you disable it during cluster creation. For more information, see
    CloudWatch Container Insights in the Amazon Elastic Container Service Developer Guide.

    Args:
        name(Text): The Amazon ECS resource name for which to modify the account setting. If serviceLongArnFormat is
            specified, the ARN for your Amazon ECS services is affected. If taskLongArnFormat is specified,
            the ARN and resource ID for your Amazon ECS tasks is affected. If containerInstanceLongArnFormat
            is specified, the ARN and resource ID for your Amazon ECS container instances is affected. If
            awsvpcTrunking is specified, the elastic network interface (ENI) limit for your Amazon ECS
            container instances is affected. If containerInsights is specified, the default setting for
            CloudWatch Container Insights for your clusters is affected.
        value(Text): The account setting value for the specified principal ARN. Accepted values are enabled and
            disabled.
        principal_arn(Text, optional): The ARN of the principal, which can be an IAM user, IAM role, or the root user. If you specify
            the root user, it modifies the account setting for all IAM users, IAM roles, and the root user
            of the account unless an IAM user or role explicitly overrides these settings. If this field is
            omitted, the setting is changed only for the authenticated user.  Federated users assume the
            account setting of the root user and can't have explicit account settings set for them. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_present:
              aws_auto.ecs.account_setting.present:
                - name: value
                - value: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.ecs.account_setting.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.ecs.list_account_settings(name)

    if before:
        result["comment"] = f"'{name}' already exists"
    else:
        try:
            ret = await hub.exec.boto3.client.ecs.put_account_setting(
                ctx,
                
                
                **{"Name": name, "value": value, "principalArn": principal_arn}
            )
            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.ecs.list_account_settings(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

async def absent(hub, ctx, name: Text, principal_arn: Text = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Disables an account setting for a specified IAM user, IAM role, or the root user for an account.

    Args:
        name(Text): The resource name for which to disable the account setting. If serviceLongArnFormat is
            specified, the ARN for your Amazon ECS services is affected. If taskLongArnFormat is specified,
            the ARN and resource ID for your Amazon ECS tasks is affected. If containerInstanceLongArnFormat
            is specified, the ARN and resource ID for your Amazon ECS container instances is affected. If
            awsvpcTrunking is specified, the ENI limit for your Amazon ECS container instances is affected.
        principal_arn(Text, optional): The ARN of the principal, which can be an IAM user, IAM role, or the root user. If you specify
            the root user, it disables the account setting for all IAM users, IAM roles, and the root user
            of the account unless an IAM user or role explicitly overrides these settings. If this field is
            omitted, the setting is changed only for the authenticated user. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_absent:
              aws_auto.ecs.account_setting.absent:
                - name: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.ecs.account_setting.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.ecs.list_account_settings(name)

    if not before:
        result["comment"] = f"'{name}' already absent"
    else:
        try:
            ret = await hub.exec.boto3.client.ecs.delete_account_setting(
                ctx,
                
                
                **{"Name": name, "principalArn": principal_arn}
            )
            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.ecs.list_account_settings(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

