# _*_ coding : UTF-8 _*_
# @Time : 2025/01/18 02:39
# @UpdateTime : 2025/01/18 02:39
# @Author : sonder
# @File : constant.py
# @Software : PyCharm
# @Comment : 本程序
from enum import Enum


class BusinessType(Enum):
    """
    业务操作类型枚举
    定义系统中的操作类型，用于记录和分类业务日志。

    枚举值说明：
    - OTHER: 其它操作，默认值为 0
    - SELECT: 查询操作，默认值为1
    - INSERT: 新增操作，值为 2
    - UPDATE: 修改操作，值为 3
    - DELETE: 删除操作，值为 4
    - GRANT: 授权操作，值为 5
    - EXPORT: 导出数据操作，值为 6
    - IMPORT: 导入数据操作，值为 7
    - FORCE: 强制退出操作，值为 8
    - GENCODE: 代码生成操作，值为 9
    - CLEAN: 清空数据操作，值为 10
    """
    OTHER = 0
    """
    其它操作，默认值为 0
    """
    SELECT = 1
    """
    查询操作，默认值为1
    """
    INSERT = 2
    """
    新增操作，值为 2
    """
    UPDATE = 3
    """
    修改操作，值为 3
    """
    DELETE = 4
    """
    删除操作，值为 4
    """
    GRANT = 5
    """
    授权操作，值为 5
    """
    EXPORT = 6
    """
    导出数据操作，值为 6
    """
    IMPORT = 7
    """
    导入数据操作，值为 7
    """
    FORCE = 8
    """
    强制退出操作，值为 8 
    """
    GENCODE = 9
    """
    代码生成操作，值为 9
    """
    CLEAN = 10
    """
    清空数据操作，值为 10
    """


class CommonConstant:
    """
    常用常量定义类，包含系统中常用的字符串标识和布尔值。

    属性:
        WWW: `www.` 主域的前缀。
        HTTP: `http://` 协议前缀。
        HTTPS: `https://` 协议前缀。
        LOOKUP_RMI: RMI（远程方法调用）协议前缀。
        LOOKUP_LDAP: LDAP 协议前缀。
        LOOKUP_LDAPS: LDAPS 协议前缀。
        YES: 系统默认值 "是" 的标识。
        NO: 系统默认值 "否" 的标识。
        DEPT_NORMAL: 部门状态，表示正常。
        DEPT_DISABLE: 部门状态，表示停用。
        UNIQUE: 标识检查结果为唯一。
        NOT_UNIQUE: 标识检查结果为不唯一。
    """

    WWW = 'www.'
    """`www.` 主域的前缀"""

    HTTP = 'http://'
    """`http://` 协议前缀"""

    HTTPS = 'https://'
    """`https://` 协议前缀"""

    LOOKUP_RMI = 'rmi:'
    """RMI（远程方法调用）协议前缀"""

    LOOKUP_LDAP = 'ldap:'
    """LDAP 协议前缀"""

    LOOKUP_LDAPS = 'ldaps:'
    """LDAPS 协议前缀"""

    YES = 'Y'
    """系统默认值 "是" 的标识"""

    NO = 'N'
    """系统默认值 "否" 的标识"""

    DEPT_NORMAL = '0'
    """部门状态，表示正常"""

    DEPT_DISABLE = '1'
    """部门状态，表示停用"""

    UNIQUE = True
    """标识检查结果为唯一"""

    NOT_UNIQUE = False
    """标识检查结果为不唯一"""


class HttpStatusConstant:
    """
    定义 HTTP 状态码的常量，描述不同操作的响应结果。

    属性:
        SUCCESS: 表示操作成功，HTTP 状态码 200。
        CREATED: 表示资源已成功创建，HTTP 状态码 201。
        ACCEPTED: 表示请求已被接受，HTTP 状态码 202。
        NO_CONTENT: 表示操作成功但无内容返回，HTTP 状态码 204。
        MOVED_PERM: 表示资源已被永久移除，HTTP 状态码 301。
        SEE_OTHER: 表示重定向到其他资源，HTTP 状态码 303。
        NOT_MODIFIED: 表示资源未被修改，HTTP 状态码 304。
        BAD_REQUEST: 参数错误，HTTP 状态码 400。
        UNAUTHORIZED: 表示未授权，HTTP 状态码 401。
        FORBIDDEN: 表示禁止访问，HTTP 状态码 403。
        NOT_FOUND: 表示资源或服务未找到，HTTP 状态码 404。
        BAD_METHOD: 不允许的 HTTP 方法，HTTP 状态码 405。
        CONFLICT: 表示资源冲突，HTTP 状态码 409。
        UNSUPPORTED_TYPE: 不支持的数据或媒体类型，HTTP 状态码 415。
        ERROR: 表示系统内部错误，HTTP 状态码 500。
        NOT_IMPLEMENTED: 接口未实现，HTTP 状态码 501。
        WARN: 系统警告消息，自定义状态码 601。
    """

    SUCCESS = 200
    """表示操作成功，HTTP 状态码 200。"""

    CREATED = 201
    """表示资源已成功创建，HTTP 状态码 201。"""

    ACCEPTED = 202
    """表示请求已被接受，HTTP 状态码 202。"""

    NO_CONTENT = 204
    """表示操作成功但无内容返回，HTTP 状态码 204。"""

    MOVED_PERM = 301
    """表示资源已被永久移除，HTTP 状态码 301。"""

    SEE_OTHER = 303
    """表示重定向到其他资源，HTTP 状态码 303。"""

    NOT_MODIFIED = 304
    """表示资源未被修改，HTTP 状态码 304。"""

    BAD_REQUEST = 400
    """参数错误，HTTP 状态码 400。"""

    UNAUTHORIZED = 401
    """表示未授权，HTTP 状态码 401。"""

    FORBIDDEN = 403
    """表示禁止访问，HTTP 状态码 403。"""

    NOT_FOUND = 404
    """表示资源或服务未找到，HTTP 状态码 404。"""

    BAD_METHOD = 405
    """不允许的 HTTP 方法，HTTP 状态码 405。"""

    CONFLICT = 409
    """表示资源冲突，HTTP 状态码 409。"""

    UNSUPPORTED_TYPE = 415
    """不支持的数据或媒体类型，HTTP 状态码 415。"""

    ERROR = 500
    """表示系统内部错误，HTTP 状态码 500。"""

    NOT_IMPLEMENTED = 501
    """接口未实现，HTTP 状态码 501。"""

    WARN = 601
    """系统警告消息，自定义状态码 601。"""


class JobConstant:
    """
    定时任务相关的常量，限制和规范任务模块的调用。

    属性:
        JOB_ERROR_LIST: 禁止调用的模块及违规字符串列表，包含敏感或不安全操作。
        JOB_WHITE_LIST: 允许调用的模块列表，用于指定合法模块。
    """

    JOB_ERROR_LIST = [
        'app', 'config', 'exceptions', 'import ', 'middlewares',
        'module_admin', 'open(', 'os.', 'server', 'sub_applications',
        'subprocess.', 'sys.', 'utils', 'while ', '__import__', '"', "'",
        ',', '?', ':', ';', '/', '|', '+', '-', '=', '~', '!', '#', '$',
        '%', '^', '&', '*', '<', '>', '(', ')', '[', ']', '{', '}', ' '
    ]
    """禁止调用的模块及违规字符串列表，包含敏感或不安全操作。"""

    JOB_WHITE_LIST = ['module_task']
    """允许调用的模块列表，用于指定合法模块。"""


class RedisKeyConfig(Enum):
    """
    定义 Redis 键的常量，用于缓存和存储数据。
    """

    @property
    def key(self):
        """
        获取 Redis 键名
        :return: 键名字符串
        """
        return self.value.get('key')

    @property
    def remark(self):
        """
        获取键名备注信息
        :return: 备注信息字符串
        """
        return self.value.get('remark')

    ACCESS_TOKEN = {'key': 'access_token', 'remark': '登录令牌信息'}
    """登录令牌信息，存储用户的访问令牌。"""
    USER_INFO = {'key': 'user_info', 'remark': '用户信息'}
    """用户信息，存储用户的详细信息。"""
    USER_ROUTES = {'key': 'user_routes', 'remark': '用户路由信息'}
    """用户路由信息，存储用户的路由信息。"""
    CAPTCHA_CODES = {'key': 'captcha_codes', 'remark': '图片验证码'}
    """图片验证码，存储验证码及其校验信息。"""
    CAPTCHA_TYPES = {'key': 'captcha_types', 'remark': '图片验证码类型'}
    """图片验证码类型，存储验证码类型及其配置信息。"""
    EMAIL_CODES = {'key': 'email_codes', 'remark': '邮箱验证码'}
    """邮箱验证码，存储邮箱验证码及其校验信息。"""
    TRANSLATION_INFO = {'key': 'translation_info', 'remark': '国际化信息'}
    """用于存储国际化数据。"""
    TRANSLATION_TYPES = {'key': 'translation_types', 'remark': '国际化类型'}
    """国际化类型，存储国际化类型及其配置信息。"""
    SYSTEM_CONFIG = {'key': 'system_config', 'remark': '系统配置信息'}
    """系统配置信息，存储系统的配置信息。"""
