package common

import "errors"

// 认证相关错误哨兵（统一存放，避免 service 和 middleware 交叉引用）
var (
	ErrEmailExists     = errors.New("该邮箱已注册")
	ErrUsernameTaken   = errors.New("该用户名已被占用")
	ErrUsernameInvalid = errors.New("用户名格式无效（支持中英文、数字、下划线、连字符，1-16个字符）")
	ErrBioTooLong          = errors.New("个性签名不能超过 128 个字符")
	ErrInvalidCred     = errors.New("邮箱或密码错误")
	ErrUserNotFound    = errors.New("用户不存在")
	ErrUserBanned      = errors.New("该账号已被封禁")
	ErrUserDeleted     = errors.New("该账号正在注销中，登录即撤销注销")
	// 统一返回，避免泄露用户存在性、软删除状态等内部信息
	ErrUserLocked          = errors.New("邮箱或密码错误")
	ErrWeakPassword        = errors.New("密码需至少 8 位，且包含字母和数字")
	ErrTokenExpired        = errors.New("登录已过期，请重新登录")
	ErrTokenInvalid        = errors.New("无效的认证凭据")
	ErrTokenRevoked        = errors.New("登录凭证已失效，请重新登录")
	ErrRateLimitAccount    = errors.New("该账号登录尝试过于频繁")
	ErrRateLimitIP         = errors.New("请求过于频繁，请稍后重试")
	ErrRateLimitRegisterIP = errors.New("注册请求过于频繁，请稍后重试")
	ErrPermissionDenied    = errors.New("权限不足")

	// 审核相关
	ErrAuditNotFound  = errors.New("审核记录不存在")
	ErrAuditNotPending = errors.New("该审核记录已处理")
	ErrAuditDisabled  = errors.New("审核功能未开启")
	ErrAuditTypeOff   = errors.New("该类型审核未开启")

	// 密码 & 注销相关
	ErrIncorrectPassword    = errors.New("当前密码错误")
	ErrLoginBeforeDelete    = errors.New("请先登录再注销")
	ErrNeedsConfirmRestore  = errors.New("需要二次确认撤销注销")
	ErrOwnerCannotDelete    = errors.New("站长不可自主注销，请先转让站长权限")
	ErrRegistrationDisabled = errors.New("注册功能已关闭")
	ErrMaintenanceMode      = errors.New("社区正在维护中，仅站长可登录")

	// 帖子相关
	ErrPostNotFound             = errors.New("帖子不存在")
	ErrPostCannotEdit           = errors.New("当前状态不允许编辑")
	ErrPostCannotSubmit         = errors.New("仅草稿和已退回帖子可提交审核")
	ErrPostCannotApprove        = errors.New("仅待审核帖子可通过")
	ErrPostCannotReject         = errors.New("仅待审核和已发布帖子可退回")
	ErrPostCannotLock           = errors.New("待审核帖子不允许锁定")
	ErrPostCannotUnlock         = errors.New("仅锁定状态可解锁")
)
