from enum import IntEnum


class AuthErrorCode(IntEnum):
    MISSING_CREDENTIALS = 10001
    MISSING_USERNAME = 10002
    MISSING_PASSWORD = 10003
    USER_NOT_FOUND = 10004
    INVALID_PASSWORD = 10005
    USER_INACTIVE = 10006
    EMPLOYEE_NOT_BOUND = 10007
    EMPLOYEE_INACTIVE = 10008
    NOT_AUTHENTICATED = 10009
    BAD_AUTHORIZATION_HEADER = 10010
    TOKEN_NOT_VALID = 10011
    TOKEN_USER_NOT_FOUND = 10012
    TOKEN_USER_INACTIVE = 10013
    PERMISSION_DENIED = 10014


AUTH_ERROR_CODE_DETAILS = {
    AuthErrorCode.MISSING_CREDENTIALS: {
        'code': 'missing_credentials',
        'message': '请输入用户名和密码',
    },
    AuthErrorCode.MISSING_USERNAME: {
        'code': 'missing_username',
        'message': '请输入用户名',
    },
    AuthErrorCode.MISSING_PASSWORD: {
        'code': 'missing_password',
        'message': '请输入密码',
    },
    AuthErrorCode.USER_NOT_FOUND: {
        'code': 'user_not_found',
        'message': '用户不存在',
    },
    AuthErrorCode.INVALID_PASSWORD: {
        'code': 'invalid_password',
        'message': '密码错误',
    },
    AuthErrorCode.USER_INACTIVE: {
        'code': 'user_inactive',
        'message': '该用户已被禁用',
    },
    AuthErrorCode.EMPLOYEE_NOT_BOUND: {
        'code': 'employee_not_bound',
        'message': '该用户未绑定员工身份',
    },
    AuthErrorCode.EMPLOYEE_INACTIVE: {
        'code': 'employee_inactive',
        'message': '该员工已离职或停用',
    },
    AuthErrorCode.NOT_AUTHENTICATED: {
        'code': 'not_authenticated',
        'message': '未提供认证凭据',
    },
    AuthErrorCode.BAD_AUTHORIZATION_HEADER: {
        'code': 'bad_authorization_header',
        'message': 'Authorization 请求头格式错误',
    },
    AuthErrorCode.TOKEN_NOT_VALID: {
        'code': 'token_not_valid',
        'message': 'Token 无效或已过期',
    },
    AuthErrorCode.TOKEN_USER_NOT_FOUND: {
        'code': 'token_user_not_found',
        'message': 'Token 对应用户不存在',
    },
    AuthErrorCode.TOKEN_USER_INACTIVE: {
        'code': 'token_user_inactive',
        'message': 'Token 对应用户已被禁用',
    },
    AuthErrorCode.PERMISSION_DENIED: {
        'code': 'permission_denied',
        'message': '无权限访问该资源',
    },
}


ERROR_CODE_GROUPS = [
    {
        'module': 'auth',
        'title': '认证',
        'enum': AuthErrorCode,
        'details': AUTH_ERROR_CODE_DETAILS,
    },
]
