// API 类型定义
/**
 * 基础响应类型
 * @template T
 * @typedef {Object} BaseResponse
 * @property {number} code - 响应码 (0表示成功)
 * @property {string} message - 响应消息
 * @property {T} [data] - 响应数据
 * @property {number} [timestamp] - 时间戳
 */

/**
 * 分页参数
 * @typedef {Object} PaginationParams
 * @property {number} [page] - 页码
 * @property {number} [pageSize] - 每页数量
 * @property {string} [keyword] - 搜索关键词
 */

/**
 * 分页响应
 * @template T
 * @typedef {Object} PaginationResponse
 * @property {T[]} list - 数据列表
 * @property {number} total - 总数量
 * @property {number} page - 当前页码
 * @property {number} pageSize - 每页数量
 * @property {number} totalPages - 总页数
 */

/**
 * 用户信息
 * @typedef {Object} UserInfo
 * @property {number} id - 用户ID
 * @property {string} username - 用户名
 * @property {string} nickname - 昵称
 * @property {string} avatar - 头像URL
 * @property {string} [phone] - 手机号
 * @property {string} [email] - 邮箱
 * @property {number} points - 积分
 * @property {number} level - 会员等级
 * @property {string} createTime - 创建时间
 */

/**
 * 登录请求参数
 * @typedef {Object} LoginParams
 * @property {string} username - 用户名
 * @property {string} password - 密码
 */

/**
 * 登录响应
 * @typedef {Object} LoginResponse
 * @property {string} token - 访问令牌
 * @property {string} refreshToken - 刷新令牌
 * @property {UserInfo} userInfo - 用户信息
 */

/**
 * 旅行计划
 * @typedef {Object} TravelPlan
 * @property {number} id - 计划ID
 * @property {string} title - 标题
 * @property {string} destination - 目的地
 * @property {string} coverImage - 封面图
 * @property {string} startDate - 开始日期
 * @property {string} endDate - 结束日期
 * @property {number} budget - 预算
 * @property {number} currentMembers - 当前成员数
 * @property {number} maxMembers - 最大成员数
 * @property {string} description - 描述
 * @property {string} status - 状态
 * @property {UserInfo} creator - 创建者
 * @property {string} createTime - 创建时间
 */

/**
 * 动物信息
 * @typedef {Object} AnimalInfo
 * @property {number} id - 动物ID
 * @property {string} name - 名称
 * @property {string} species - 种类
 * @property {number} price - 价格
 * @property {string} image - 图片
 * @property {string} description - 描述
 * @property {string} location - 位置
 * @property {boolean} isHot - 是否热门
 * @property {string} status - 状态
 * @property {string} createTime - 创建时间
 */

/**
 * 花束信息
 * @typedef {Object} FlowerInfo
 * @property {number} id - 花束ID
 * @property {string} name - 名称
 * @property {string} description - 描述
 * @property {number} price - 价格
 * @property {string} image - 图片
 * @property {string} category - 分类
 * @property {number} stock - 库存
 * @property {string} createTime - 创建时间
 */

/**
 * 订单信息
 * @typedef {Object} OrderInfo
 * @property {string} id - 订单ID
 * @property {string} orderNo - 订单编号
 * @property {string} type - 订单类型 (travel/animal/flower)
 * @property {string} title - 订单标题
 * @property {string} image - 图片
 * @property {number} price - 单价
 * @property {number} count - 数量
 * @property {number} totalAmount - 总金额
 * @property {string} status - 订单状态
 * @property {string} createTime - 创建时间
 * @property {string} [payTime] - 支付时间
 * @property {string} [completeTime] - 完成时间
 */

/**
 * 支付信息
 * @typedef {Object} PaymentInfo
 * @property {string} paymentId - 支付ID
 * @property {number} amount - 支付金额
 * @property {string} status - 支付状态
 * @property {string} createTime - 创建时间
 * @property {string} [payTime] - 支付时间
 */

/**
 * 系统公告
 * @typedef {Object} SystemNotice
 * @property {number} id - 公告ID
 * @property {string} title - 标题
 * @property {string} content - 内容
 * @property {string} type - 类型
 * @property {boolean} isActive - 是否激活
 * @property {string} createTime - 创建时间
 */

/**
 * 错误码定义
 * @enum {number}
 */
export const ErrorCode = {
  SUCCESS: 0,
  UNAUTHORIZED: 401,
  FORBIDDEN: 403,
  NOT_FOUND: 404,
  INTERNAL_ERROR: 500,
  NETWORK_ERROR: 1001,
  PARAM_ERROR: 1002,
  BUSINESS_ERROR: 1003
}

/**
 * 订单状态
 * @enum {string}
 */
export const OrderStatus = {
  UNPAID: 'unpaid',        // 待付款
  PAID: 'paid',            // 已付款
  DELIVERED: 'delivered',  // 已发货
  COMPLETED: 'completed',  // 已完成
  CANCELLED: 'cancelled'   // 已取消
}

/**
 * 支付状态
 * @enum {string}
 */
export const PaymentStatus = {
  PENDING: 'pending',      // 待支付
  SUCCESS: 'success',      // 支付成功
  FAILED: 'failed',        // 支付失败
  REFUNDED: 'refunded'     // 已退款
}

/**
 * 旅行计划状态
 * @enum {string}
 */
export const TravelStatus = {
  RECRUITING: 'recruiting',  // 招募中
  FULL: 'full',             // 已满员
  ONGOING: 'ongoing',       // 进行中
  COMPLETED: 'completed',   // 已完成
  CANCELLED: 'cancelled'    // 已取消
}

// 导出所有类型
export default {
  BaseResponse,
  PaginationParams,
  PaginationResponse,
  UserInfo,
  LoginParams,
  LoginResponse,
  TravelPlan,
  AnimalInfo,
  FlowerInfo,
  OrderInfo,
  PaymentInfo,
  SystemNotice,
  ErrorCode,
  OrderStatus,
  PaymentStatus,
  TravelStatus
}

// 类型检查工具
export const TypeUtils = {
  /**
   * 检查是否为有效用户信息
   * @param {any} obj
   * @returns {boolean}
   */
  isUserInfo(obj) {
    return obj && typeof obj.id === 'number' && typeof obj.username === 'string'
  },

  /**
   * 检查是否为有效旅行计划
   * @param {any} obj
   * @returns {boolean}
   */
  isTravelPlan(obj) {
    return obj && typeof obj.id === 'number' && typeof obj.destination === 'string'
  },

  /**
   * 检查是否为有效订单信息
   * @param {any} obj
   * @returns {boolean}
   */
  isOrderInfo(obj) {
    return obj && typeof obj.id === 'string' && typeof obj.orderNo === 'string'
  }
}