package com.huimv.employment.common.exception;

/**
 * 业务错误码枚举。
 * <p>
 * 约定：
 * <ul>
 *   <li>4xx 段 — 客户端/request 问题（参数错误、验证码错误等）</li>
 *   <li>429xx 段 — 限流/频率控制</li>
 *   <li>403xx 段 — 权限/账号状态问题</li>
 *   <li>500xx 段 — 服务端/第三方调用失败</li>
 * </ul>
 * 通过 {@link BizException} 抛出，由 {@code GlobalExceptionHandler} 统一转换为 {@link com.huimv.employment.common.web.R} 响应。
 * </p>
 */
public enum ErrorCode {

    /** 通用：请求参数不合法 */
    BAD_REQUEST(400, "请求参数错误"),

    /** 通用：未登录或 Token 已过期 */
    UNAUTHORIZED(401, "未登录或登录已失效"),

    /** 通用：无访问权限 */
    FORBIDDEN(403, "无访问权限"),

    /** 通用：资源不存在 */
    NOT_FOUND(404, "资源不存在"),

    /** 短信：同一手机号发送过于频繁（冷却期内重复请求） */
    SMS_SEND_TOO_FREQUENT(42901, "验证码发送过于频繁，请稍后再试"),

    /** 短信：阿里云 API 调用失败或配置不完整 */
    SMS_SEND_FAILED(50002, "短信发送失败，请稍后再试"),

    /** 短信：验证码错误、已过期或已被使用（一次性验证码） */
    SMS_CODE_INVALID(40001, "验证码错误或已过期"),

    /** 用户：账号已被管理员禁用 */
    USER_DISABLED(40301, "账号已被禁用"),

    /** 临时工：档案已登记，不可重复提交 */
    WORKER_ALREADY_REGISTERED(40002, "您已完成登记，无需重复提交"),

    /** 临时工：仅 worker 身份可访问 */
    WORKER_ONLY(40302, "仅临时工用户可访问"),

    /** 企业：已完成登记，不可重复提交 */
    ENTERPRISE_ALREADY_REGISTERED(40003, "您已完成企业登记，无需重复提交"),

    /** 企业：仅 enterprise 身份可访问 */
    ENTERPRISE_ONLY(40303, "仅企业用户可访问"),

    /** AI：大模型网关已关闭 */
    AI_SERVICE_DISABLED(50301, "AI 服务未启用"),

    /** AI：调用上游大模型失败 */
    AI_SERVICE_FAILED(50003, "AI 服务调用失败，请稍后再试"),

    /** 知识库：远程服务已关闭 */
    KB_SERVICE_DISABLED(50302, "知识库服务未启用"),

    /** 知识库：调用上游失败 */
    KB_SERVICE_FAILED(50004, "知识库服务调用失败，请稍后再试"),

    /** 账密：用户名或密码错误 */
    LOGIN_BAD_CREDENTIALS(40010, "用户名或密码错误"),

    /** 账密：尚未设置密码 */
    PASSWORD_NOT_SET(40011, "尚未设置登录密码，请使用验证码或微信登录"),

    /** 账密：用户名已被占用 */
    USERNAME_ALREADY_EXISTS(40012, "用户名已被占用"),

    /** 账密：密码格式不符合要求 */
    PASSWORD_FORMAT_INVALID(40013, "密码格式不符合要求"),

    /** 账密：登录失败次数过多已锁定 */
    LOGIN_LOCKED(40304, "登录失败次数过多，请稍后再试"),

    /** 登录：请求身份与账号已绑定类型不一致 */
    USER_TYPE_MISMATCH(40305, "账号类型不匹配，请从正确的入口登录"),

    /** 草稿：已确认或已关闭，无法修改 */
    DRAFT_NOT_EDITABLE(40020, "草稿已确认或已关闭，无法修改"),

    /** 内网：AI 工具接口鉴权失败 */
    INTERNAL_API_UNAUTHORIZED(40101, "内网服务鉴权失败"),

    /** 内网：AI 工具接口未启用 */
    INTERNAL_API_DISABLED(50303, "内网 AI 工具接口未启用"),

    /** 通用：未预期的系统异常 */
    INTERNAL_ERROR(500, "系统繁忙，请稍后再试");

    /** HTTP 风格业务码，写入响应体 code 字段 */
    private final int code;

    /** 默认错误提示文案 */
    private final String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
