/**
 * robot-manager 业务错误码 (v3)
 *
 * - 所有 code 以 `ROBOT_` 前缀
 * - throw 时用：`throw new BadRequestException({ code: RobotError.XXX, message: '英文 fallback' })`
 * - 前端按 code 在 i18n `errorCodes` 字典查翻译；查不到则 fallback 到 message
 */
export const RobotError = {
  // ---- 状态机校验 ----
  VERSION_CONFLICT: 'ROBOT_VERSION_CONFLICT',
  INVALID_TRANSITION: 'ROBOT_INVALID_TRANSITION',
  GUARD_FAILED: 'ROBOT_GUARD_FAILED',

  // ---- Guard 类（具体原因在 reasons[] 中）----
  FUNCTION_TEST_NOT_PASSED: 'ROBOT_FUNCTION_TEST_NOT_PASSED',
  CONVERSION_NOT_VALIDATED: 'ROBOT_CONVERSION_NOT_VALIDATED',
  DELIVERY_NOT_VALIDATED: 'ROBOT_DELIVERY_NOT_VALIDATED',
  PAYMENT_NOT_PAID: 'ROBOT_PAYMENT_NOT_PAID',
  PGI_NOT_READY: 'ROBOT_PGI_NOT_READY',
  RMA_NOT_ELIGIBLE: 'ROBOT_RMA_NOT_ELIGIBLE',
  QUOTE_NOT_APPROVED: 'ROBOT_QUOTE_NOT_APPROVED',
  RESERVE_REQUIRES_BRANDED: 'ROBOT_RESERVE_REQUIRES_BRANDED',
  CLOSED_NEEDS_DISPOSAL: 'ROBOT_CLOSED_NEEDS_DISPOSAL',
  RENTAL_NEEDS_CONTRACT: 'ROBOT_RENTAL_NEEDS_CONTRACT',
  D2_WINDOW_EXPIRED: 'ROBOT_D2_WINDOW_EXPIRED',

  // ---- 业务约束 ----
  PO_REQUIRES_SUPPLIER: 'ROBOT_PO_REQUIRES_SUPPLIER',
  SO_REQUIRES_CUSTOMER: 'ROBOT_SO_REQUIRES_CUSTOMER',
} as const;

export type RobotErrorCode = (typeof RobotError)[keyof typeof RobotError];
