from enum import Enum
from typing import Literal


class CatalogGrantPrivilege(Enum):
    ALL_PRIVILEGES = "ALL_PRIVILEGES"
    APPLY_TAG = "APPLY_TAG"
    CREATE_CONNECTION = "CREATE_CONNECTION"
    CREATE_EXTERNAL_LOCATION = "CREATE_EXTERNAL_LOCATION"
    CREATE_EXTERNAL_TABLE = "CREATE_EXTERNAL_TABLE"
    CREATE_EXTERNAL_VOLUME = "CREATE_EXTERNAL_VOLUME"
    CREATE_FOREIGN_CATALOG = "CREATE_FOREIGN_CATALOG"
    CREATE_FUNCTION = "CREATE_FUNCTION"
    CREATE_MANAGED_STORAGE = "CREATE_MANAGED_STORAGE"
    CREATE_MATERIALIZED_VIEW = "CREATE_MATERIALIZED_VIEW"
    CREATE_MODEL = "CREATE_MODEL"
    CREATE_SCHEMA = "CREATE_SCHEMA"
    CREATE_STORAGE_CREDENTIAL = "CREATE_STORAGE_CREDENTIAL"
    CREATE_TABLE = "CREATE_TABLE"
    CREATE_VOLUME = "CREATE_VOLUME"
    EXECUTE = "EXECUTE"
    MANAGE = "MANAGE"
    MODIFY = "MODIFY"
    READ_VOLUME = "READ_VOLUME"
    REFRESH = "REFRESH"
    SELECT = "SELECT"
    USE_CATALOG = "USE_CATALOG"
    USE_CONNECTION = "USE_CONNECTION"
    USE_SCHEMA = "USE_SCHEMA"
    WRITE_VOLUME = "WRITE_VOLUME"


CatalogGrantPrivilegeParam = (
    Literal[
        "ALL_PRIVILEGES",
        "APPLY_TAG",
        "CREATE_CONNECTION",
        "CREATE_EXTERNAL_LOCATION",
        "CREATE_EXTERNAL_TABLE",
        "CREATE_EXTERNAL_VOLUME",
        "CREATE_FOREIGN_CATALOG",
        "CREATE_FUNCTION",
        "CREATE_MANAGED_STORAGE",
        "CREATE_MATERIALIZED_VIEW",
        "CREATE_MODEL",
        "CREATE_SCHEMA",
        "CREATE_STORAGE_CREDENTIAL",
        "CREATE_TABLE",
        "CREATE_VOLUME",
        "EXECUTE",
        "MANAGE",
        "MODIFY",
        "READ_VOLUME",
        "REFRESH",
        "SELECT",
        "USE_CATALOG",
        "USE_CONNECTION",
        "USE_SCHEMA",
        "WRITE_VOLUME",
    ]
    | CatalogGrantPrivilege
)
