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

hub.exec.boto3.client.redshift.create_cluster_subnet_group
hub.exec.boto3.client.redshift.delete_cluster_subnet_group
hub.exec.boto3.client.redshift.describe_cluster_subnet_groups
hub.exec.boto3.client.redshift.modify_cluster_subnet_group
"""



from typing import *
import dict_tools.differ as differ
async def present(hub, ctx, name: Text, cluster_subnet_group_name: Text, description: Text, subnet_ids: List, tags: List = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Creates a new Amazon Redshift subnet group. You must provide a list of one or more subnets in your existing
    Amazon Virtual Private Cloud (Amazon VPC) when creating Amazon Redshift subnet group.  For information about
    subnet groups, go to Amazon Redshift Cluster Subnet Groups in the Amazon Redshift Cluster Management Guide.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        cluster_subnet_group_name(Text): The name for the subnet group. Amazon Redshift stores the value as a lowercase string.
            Constraints:   Must contain no more than 255 alphanumeric characters or hyphens.   Must not be
            "Default".   Must be unique for all subnet groups that are created by your Amazon Web Services
            account.   Example: examplesubnetgroup.
        description(Text): A description for the subnet group.
        subnet_ids(List): An array of VPC subnet IDs. A maximum of 20 subnets can be modified in a single request.
        tags(List, optional): A list of tag instances. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_present:
              aws_auto.redshift.cluster_subnet_group.present:
                - name: value
                - cluster_subnet_group_name: value
                - description: value
                - subnet_ids: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.redshift.cluster_subnet_group.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.redshift.describe_cluster_subnet_groups(name)

    if before:
        result["comment"] = f"'{name}' already exists"
    else:
        try:
            ret = await hub.exec.boto3.client.redshift.create_cluster_subnet_group(
                ctx,
                
                
                **{"ClusterSubnetGroupName": cluster_subnet_group_name, "Description": description, "SubnetIds": subnet_ids, "Tags": tags}
            )
            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.redshift.describe_cluster_subnet_groups(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

async def absent(hub, ctx, name: Text, cluster_subnet_group_name: Text)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Deletes the specified cluster subnet group.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        cluster_subnet_group_name(Text): The name of the cluster subnet group name to be deleted.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

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

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

