package protocol

// 错误码（WS error 帧与 REST 错误体共用）。
const (
	ErrQuotaExceeded       = "QUOTA_EXCEEDED"        // 试用 + 余额均已用尽
	ErrUnauthorized        = "UNAUTHORIZED"          // JWT 失效 / 被踢出
	ErrASRUnavailable      = "ASR_UNAVAILABLE"       // 上游 ASR 故障（重试/切备用后仍失败）
	ErrSessionLimit        = "SESSION_LIMIT"         // 单会话超长，已自动截断定稿
	ErrRateLimited         = "RATE_LIMITED"          // 设备 30 分钟滑动窗口超限
	ErrFeedbackRateLimited = "FEEDBACK_RATE_LIMITED" // 反馈每日条数超限
	ErrBadRequest          = "BAD_REQUEST"
	ErrInternal            = "INTERNAL"
)

// ErrMessage 错误码对应的用户可读文案（客户端可直接展示，遵循文案规范：短句、无句号）。
var ErrMessage = map[string]string{
	ErrQuotaExceeded:       "今日试用已用完，去购买时长",
	ErrUnauthorized:        "登录已失效，请重新登录",
	ErrASRUnavailable:      "识别服务暂不可用，稍后再试",
	ErrSessionLimit:        "单次最长 3 分钟，松开后可继续",
	ErrRateLimited:         "操作过于频繁，稍后再试",
	ErrFeedbackRateLimited: "今天反馈次数已达上限",
}

// APIError REST 统一错误体。
type APIError struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

func NewAPIError(code string) APIError {
	return APIError{Code: code, Message: ErrMessage[code]}
}
