from enum import Enum, unique

'''
    ocr官方文档: https://ai.baidu.com/ai-doc/OCR/zkibizyhz
    官方文档: https://ai.baidu.com/ai-doc/VEHICLE/rk3inf9tj
    参数1: 异常编号
    参数2: 异常英文描述
    参数3: 异常中文描述
    参数4: 0-异常信息统一输出为内部异常 
          1-异常信息可以输出
          2-输出空的异常信息
    参数5: 指定异常重试的次数
'''


# 异常枚举
@unique
class BaiduSdkErrorEnum(Enum):

    UNKNOWN_ERROR = (1, "Unknown error", "未知错误", 0, 0)

    SERVICE_TEMPORARILY_UNAVAILABLE = (2, "Service temporarily unavailable", "服务暂不可用，请再次请求", 0, 3)

    UNSUPPORTED_OPENAPI_METHOD = (3, "Unsupported openapi method", "调用的API不存在", 0, 0)

    API_REQUEST_LIMIT_REACHED = (4, "Open api request limit reached", "请求量限制, 请稍后再试!", 1, 5)

    NO_PERMISSION_TO_ACCESS_DATA = (6, "No permission to access data", "无权限访问该用户数据", 1, 0)

    GET_SERVICE_TOKEN_FAILED = (13, "Get service token failed", "获取token失败", 0, 2)

    IAM_CERTIFICATION_FAILED = (14, "IAM Certification failed", "IAM 鉴权失败", 0, 1)

    APP_NOT_EXSITS_OR_CREATE_FAILED = (15, "app not exsits or create failed", "应用不存在或者创建失败", 0, 0)

    API_DAILY_REQUEST_LIMIT_REACHED = (17, "Open api daily request limit reached", "每天请求量超限额!", 1, 2)

    API_QPS_REQUEST_LIMIT_REACHED = (18, "Open api qps request limit reached", "QPS超限额!", 1, 10)

    API_TOTAL_REQUEST_LIMIT_REACHED = (19, "Open api total request limit reached", "请求总量超限额!", 1, 2)

    INVALID_TOKEN = (100, "Invalid parameter", "无效的access_token参数，token拉取失败", 0, 1)

    ACCESS_TOKEN_INVALID_OR_NO_LONGER_VALID = (110, "Access token invalid or no longer valid", "access_token无效，token有效期为30天", 0, 1)

    ACCESS_TOKEN_EXPIRED = (111, "Access token expired", "access token过期，token有效期为30天", 0, 1)

    INTERNAL_ERROR = (282000, "internal error", "服务器内部错误", 0, 1)

    INVALID_PARAM = (216100, "invalid param", "请求中包含非法参数!", 0, 1)

    NOT_ENOUGH_PARAM = (216101, "not enough param", "缺少必须的参数!", 0, 0)

    SERVICE_NOT_SUPPORT = (216102, "service not support", "请求了不支持的服务，请检查调用的url", 0, 0)

    PARAM_TOO_LONG = (216103, "param too long", "请求中某些参数过长!", 1, 0)

    APPID_NOT_EXIST = (216110, "appid not exist", "appid不存在", 0, 0)

    EMPTY_IMAGE = (216200, "empty image", "图片为空!", 1, 0)

    IMAGE_FORMAT_ERROR = (216201, "image format error", "上传的图片格式错误，现阶段我们支持的图片格式为：PNG、JPG、JPEG、BMP", 1, 0)

    IMAGE_SIZE_ERROR = (216202, "image size error", "上传的图片大小错误，分辨率不高于4096*4096", 1, 0)

    IMAGE_SIZE_BASE_ERROR = (216203, "image size error", "上传的图片编码有误", 1, 0)

    RECOGNIZE_ERROR = (216630, "recognize error", "识别错误", 2, 2)

    DETECT_ERROR = (216634, "detect error", "检测错误", 2, 2)

    MISSING_PARAMETERS = (282003, "missing parameters: {参数名}", "请求参数缺失", 0, 0)

    BATCH_ROCESSING_ERROR = (282005, "batch processing error", "处理批量任务时发生部分或全部错误", 0, 5)

    BATCH_TASK_LIMIT_REACHED = (282006, "batch task limit reached", "批量任务处理数量超出限制，请将任务数量减少到10或10以下", 1, 5)

    IMAGE_TRANSCODE_ERROR = (282100, "image transcode error", "图片压缩转码错误", 0, 1)

    IMAGE_SPLIT_LIMIT_REACHED = (282101, "image split limit reached", "长图片切分数量超限!", 1, 1)

    TARGET_DETECT_ERROR = (282102, "target detect error", "未检测到图片中识别目标!", 2, 1)

    TARGET_RECOGNIZE_ERROR = (282103, "target recognize error", "图片目标识别错误!", 2, 1)

    URLS_NOT_EXIT = (282110, "urls not exit", "URL参数不存在，请核对URL后再次提交!", 1, 0)

    URL_FORMAT_ILLEGAL = (282111, "url format illegal", "URL格式非法!", 1, 0)

    URL_DOWNLOAD_TIMEOUT = (282112, "url download timeout", "URL格式非法!", 1, 0)

    URL_RESPONSE_INVALID = (282113, "url response invalid", "URL返回无效参数!", 1, 0)

    URL_SIZE_ERROR = (282114, "url size error", "URL长度超过1024字节或为0!", 1, 0)

    REQUEST_ID_NOT_EXIST = (282808, "request id: xxxxx not exist", "request id xxxxx 不存在", 0, 0)

    RESULT_TYPE_ERROR = (282809, "result type error", "返回结果请求错误（不属于excel或json）", 0, 0)

    IMAGE_RECOGNIZE_ERROR = (282810, "image recognize error", "图像识别错误", 2, 1)

    INVALID_ARGUMENT = (283300, "Invalid argument", "入参格式有误，可检查下图片编码、代码格式是否有误", 1, 0)

    INTERNAL_ERROR_2 = (336000, "Internal error", "服务器内部错误", 0, 0)

    INVALID_ARGUMENT_2 = (336001, "Invalid Argument", "入参格式有误，比如缺少必要参数、图片编码错误等等，可检查下图片编码、代码格式是否有误", 0, 0)

    SDK_IMAGE_SIZE_ERROR = ('SDK100', "image size error", "图片大小超限，最短边至少50px，最长边最大4096px ，建议长宽比3：1以内，图片请求格式支持：PNG、JPG、BMP", 1, 0)

    SDK_IMAGE_LENGTH_ERROR = ('SDK101', "image length error", "图片边长不符合要求，最短边至少50px，最长边最大4096px ，建议长宽比3：1以内", 1, 0)

    SDK_READ_IMAGE_FILE_ERROR = ('SDK102', "read image file error", "读取图片文件错误", 0, 1)

    SDK_CONNECTION_OR_READ_DATA_TIME_OUT = ('SDK108', "connection or read data time out", "连接超时或读取数据超时，请检查本地网络设置、文件读取设置", 0, 3)

    SDK_UNSUPPORTED_IMAGE_FORMAT = ('SDK109', "unsupported image format", "不支持的图片格式，当前支持以下几类图片：PNG、JPG、BMP", 1, 0)


BAIDUERRORDATA = {
    BaiduSdkErrorEnum.UNKNOWN_ERROR.value[0]: BaiduSdkErrorEnum.UNKNOWN_ERROR,
    BaiduSdkErrorEnum.SERVICE_TEMPORARILY_UNAVAILABLE.value[0]: BaiduSdkErrorEnum.SERVICE_TEMPORARILY_UNAVAILABLE,
    BaiduSdkErrorEnum.UNSUPPORTED_OPENAPI_METHOD.value[0]: BaiduSdkErrorEnum.UNSUPPORTED_OPENAPI_METHOD,
    BaiduSdkErrorEnum.API_REQUEST_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.API_REQUEST_LIMIT_REACHED,
    BaiduSdkErrorEnum.NO_PERMISSION_TO_ACCESS_DATA.value[0]: BaiduSdkErrorEnum.NO_PERMISSION_TO_ACCESS_DATA,
    BaiduSdkErrorEnum.GET_SERVICE_TOKEN_FAILED.value[0]: BaiduSdkErrorEnum.GET_SERVICE_TOKEN_FAILED,
    BaiduSdkErrorEnum.IAM_CERTIFICATION_FAILED.value[0]: BaiduSdkErrorEnum.IAM_CERTIFICATION_FAILED,
    BaiduSdkErrorEnum.APP_NOT_EXSITS_OR_CREATE_FAILED.value[0]: BaiduSdkErrorEnum.APP_NOT_EXSITS_OR_CREATE_FAILED,
    BaiduSdkErrorEnum.API_DAILY_REQUEST_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.API_DAILY_REQUEST_LIMIT_REACHED,
    BaiduSdkErrorEnum.API_QPS_REQUEST_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.API_QPS_REQUEST_LIMIT_REACHED,
    BaiduSdkErrorEnum.API_TOTAL_REQUEST_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.API_TOTAL_REQUEST_LIMIT_REACHED,
    BaiduSdkErrorEnum.INVALID_TOKEN.value[0]: BaiduSdkErrorEnum.INVALID_TOKEN,
    BaiduSdkErrorEnum.ACCESS_TOKEN_INVALID_OR_NO_LONGER_VALID.value[0]: BaiduSdkErrorEnum.ACCESS_TOKEN_INVALID_OR_NO_LONGER_VALID,
    BaiduSdkErrorEnum.ACCESS_TOKEN_EXPIRED.value[0]: BaiduSdkErrorEnum.ACCESS_TOKEN_EXPIRED,
    BaiduSdkErrorEnum.INTERNAL_ERROR.value[0]: BaiduSdkErrorEnum.INTERNAL_ERROR,
    BaiduSdkErrorEnum.INVALID_PARAM.value[0]: BaiduSdkErrorEnum.INVALID_PARAM,
    BaiduSdkErrorEnum.NOT_ENOUGH_PARAM.value[0]: BaiduSdkErrorEnum.NOT_ENOUGH_PARAM,
    BaiduSdkErrorEnum.SERVICE_NOT_SUPPORT.value[0]: BaiduSdkErrorEnum.SERVICE_NOT_SUPPORT,
    BaiduSdkErrorEnum.PARAM_TOO_LONG.value[0]: BaiduSdkErrorEnum.PARAM_TOO_LONG,
    BaiduSdkErrorEnum.APPID_NOT_EXIST.value[0]: BaiduSdkErrorEnum.APPID_NOT_EXIST,
    BaiduSdkErrorEnum.EMPTY_IMAGE.value[0]: BaiduSdkErrorEnum.EMPTY_IMAGE,
    BaiduSdkErrorEnum.IMAGE_FORMAT_ERROR.value[0]: BaiduSdkErrorEnum.IMAGE_FORMAT_ERROR,
    BaiduSdkErrorEnum.IMAGE_SIZE_ERROR.value[0]: BaiduSdkErrorEnum.IMAGE_SIZE_ERROR,
    BaiduSdkErrorEnum.IMAGE_SIZE_BASE_ERROR.value[0]: BaiduSdkErrorEnum.IMAGE_SIZE_BASE_ERROR,
    BaiduSdkErrorEnum.RECOGNIZE_ERROR.value[0]: BaiduSdkErrorEnum.RECOGNIZE_ERROR,
    BaiduSdkErrorEnum.DETECT_ERROR.value[0]: BaiduSdkErrorEnum.DETECT_ERROR,
    BaiduSdkErrorEnum.MISSING_PARAMETERS.value[0]: BaiduSdkErrorEnum.MISSING_PARAMETERS,
    BaiduSdkErrorEnum.BATCH_ROCESSING_ERROR.value[0]: BaiduSdkErrorEnum.BATCH_ROCESSING_ERROR,
    BaiduSdkErrorEnum.BATCH_TASK_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.BATCH_TASK_LIMIT_REACHED,
    BaiduSdkErrorEnum.IMAGE_TRANSCODE_ERROR.value[0]: BaiduSdkErrorEnum.IMAGE_TRANSCODE_ERROR,
    BaiduSdkErrorEnum.IMAGE_SPLIT_LIMIT_REACHED.value[0]: BaiduSdkErrorEnum.IMAGE_SPLIT_LIMIT_REACHED,
    BaiduSdkErrorEnum.TARGET_DETECT_ERROR.value[0]: BaiduSdkErrorEnum.TARGET_DETECT_ERROR,
    BaiduSdkErrorEnum.TARGET_RECOGNIZE_ERROR.value[0]: BaiduSdkErrorEnum.TARGET_RECOGNIZE_ERROR,
    BaiduSdkErrorEnum.URL_SIZE_ERROR.value[0]: BaiduSdkErrorEnum.URL_SIZE_ERROR,
    BaiduSdkErrorEnum.REQUEST_ID_NOT_EXIST.value[0]: BaiduSdkErrorEnum.REQUEST_ID_NOT_EXIST,
    BaiduSdkErrorEnum.RESULT_TYPE_ERROR.value[0]: BaiduSdkErrorEnum.RESULT_TYPE_ERROR,
    BaiduSdkErrorEnum.IMAGE_RECOGNIZE_ERROR.value[0]: BaiduSdkErrorEnum.IMAGE_RECOGNIZE_ERROR,
    BaiduSdkErrorEnum.INVALID_ARGUMENT.value[0]: BaiduSdkErrorEnum.INVALID_ARGUMENT,
    BaiduSdkErrorEnum.INTERNAL_ERROR_2.value[0]: BaiduSdkErrorEnum.INTERNAL_ERROR_2,
    BaiduSdkErrorEnum.INVALID_ARGUMENT_2.value[0]: BaiduSdkErrorEnum.INVALID_ARGUMENT_2,
    BaiduSdkErrorEnum.SDK_IMAGE_SIZE_ERROR.value[0]: BaiduSdkErrorEnum.SDK_IMAGE_SIZE_ERROR,
    BaiduSdkErrorEnum.SDK_IMAGE_LENGTH_ERROR.value[0]: BaiduSdkErrorEnum.SDK_IMAGE_LENGTH_ERROR,
    BaiduSdkErrorEnum.SDK_READ_IMAGE_FILE_ERROR.value[0]: BaiduSdkErrorEnum.SDK_READ_IMAGE_FILE_ERROR,
    BaiduSdkErrorEnum.SDK_CONNECTION_OR_READ_DATA_TIME_OUT.value[0]: BaiduSdkErrorEnum.SDK_CONNECTION_OR_READ_DATA_TIME_OUT,
    BaiduSdkErrorEnum.SDK_UNSUPPORTED_IMAGE_FORMAT.value[0]: BaiduSdkErrorEnum.SDK_UNSUPPORTED_IMAGE_FORMAT,
    BaiduSdkErrorEnum.URLS_NOT_EXIT.value[0]: BaiduSdkErrorEnum.URLS_NOT_EXIT,
    BaiduSdkErrorEnum.URL_FORMAT_ILLEGAL.value[0]: BaiduSdkErrorEnum.URL_FORMAT_ILLEGAL,
    BaiduSdkErrorEnum.URL_DOWNLOAD_TIMEOUT.value[0]: BaiduSdkErrorEnum.URL_DOWNLOAD_TIMEOUT,
    BaiduSdkErrorEnum.URL_RESPONSE_INVALID.value[0]: BaiduSdkErrorEnum.URL_RESPONSE_INVALID
}

@unique
class VehicleEnum(Enum):
    CAR = ("car", "小汽车", 0)
    TRICYCLE = ("tricycle", "三轮车", 1)
    MOTORBIKE = ("motorbike", "摩托车", 2)
    CARPLATE = ("carplate", "车牌", 3)
    TRUCK = ("truck", "卡车", 4)
    BUS = ("bus", "巴士", 5)


VehicleEnumVALUE={
    VehicleEnum.CAR.value[0]: VehicleEnum.CAR,
    VehicleEnum.TRICYCLE.value[0]: VehicleEnum.TRICYCLE,
    VehicleEnum.MOTORBIKE.value[0]: VehicleEnum.MOTORBIKE,
    VehicleEnum.CARPLATE.value[0]: VehicleEnum.CARPLATE,
    VehicleEnum.TRUCK.value[0]: VehicleEnum.TRUCK,
    VehicleEnum.BUS.value[0]: VehicleEnum.BUS
}