from enum import Enum


class UserRole(str, Enum):
    ADMIN = "admin"
    USER = "user"


class Status(str, Enum):
    ACTIVE = "active"
    INACTIVE = "inactive"
    DELETED = "deleted"


class ForeignKeyModels(Enum):
    COUNTRY = "countries"
    REGION = "regions"
    LOCATION = "locations"
    FILE = "files"


class UserAccessLevel(Enum):
    SUPER_ADMIN = "super_admin"
    ADMIN = "admin"
    User = "user"
    SUPPORT = "support"
    GUEST = "guest"


class WineProperty(str, Enum):
    """
    Enum representing properties of wine data.

    Each property has a display value that is used in UI and data processing.
    The value can be accessed directly via the .value attribute, which is
    compatible with the original Groovy code's value() method.
    """

    APPELLATION = "Appellation"
    BOTTLE_SIZE = "Bottle Size"
    COLOR = "Color"
    COUNTRY = "Country"
    CURRENCY = "Currency"
    CUSTOM = "Custom"
    DESCRIPTION = "Description"
    IN_STOCK = "In Stock"
    PRICE = "Price"
    PROD_ID = "PRODID"
    PRODUCER = "Producer"
    QUANTITY = "Quantity"
    RATING = "Rating"
    REGION = "Region"
    REGULAR_PRICE = "Regular Price"
    SALE_PRICE = "Sale Price"
    SUB_APPELLATION = "Sub Appellation"
    SUB_REGION = "Sub Region"
    TYPE = "Type"
    URL = "URL"
    VARIETAL = "Varietal"
    VINTAGE = "Vintage"
    WINE_TITLE = "Wine Title"

    # Deprecated
    SELL_PRICE = "Sale Price"


class Separator(str, Enum):
    """
    Enum representing different types of separators used in data processing.

    Each separator has a display value that is used in UI and data processing.
    The value can be accessed directly via the .value attribute, which is
    compatible with the original Groovy code's value() method.
    """

    COMMA = ","
    SEMICOLON = ";"
    TAB = "\t"
    PIPE = "|"
    SPACE = " "


class SourceEnum(str, Enum):
    """Enum representing different sources of data.
    Each source has a display value that is used in UI and data processing.
    The value can be accessed directly via the .value attribute, which is
    compatible with the original Groovy code's value() method.
    """

    KEYWORD_GENERATOR = ("KW_GENERATOR",)


class WebCrawlerFileType(str, Enum):
    """
    Enum representing different types of web crawler files.

    Each file type has a display value that is used in UI and data processing.
    The value can be accessed directly via the .value attribute, which is
    compatible with the original Groovy code's value() method.
    """

    HISTORY = "history"
    KEYWORD = "keyword"
    MASTER_FILE = "master_file"