// ============================================================
// 数据类型定义（与后端 VO 一一对应，参考 docs/API_CATALOG.md）
// ============================================================

/**
 * 后端统一响应结构（仅在直接拿 axios 原始响应时用，业务代码拿到的都是 data）
 */
export interface ApiResponse<T = unknown> {
  code: number
  message: string
  data: T
}

/** 分页结果（MyBatis-Plus Page） */
export interface PageResult<T> {
  records: T[]
  total: number
  size: number
  current: number
  pages: number
}

// ==================== 用户 ====================

/** 用户端登录响应（UserAuthController.LoginResp） */
export interface LoginResult {
  token: string
  userId: number
  nickname: string
}

/**
 * 当前登录用户（简化模型）
 * 后端没有 /api/user/profile，这里只存登录接口拿到的字段
 * 后续扩展可调用其他业务接口补充
 */
export interface UserInfo {
  id: number
  nickname: string
  avatar?: string
  phone?: string
  username?: string
}

// ==================== 商品 ====================

/** 商品列表项（ProductListVO） */
export interface ProductListItem {
  id: number
  name: string
  categoryId: number
  categoryName?: string
  brand?: string
  mainImage: string
  minPrice: number
  maxPrice?: number
  totalStock?: number
  sales: number
  status: number
  isHot: number
  isNew: number
  createTime: string
}

/** 商品详情（ProductDetailVO） */
export interface ProductDetail {
  id: number
  name: string
  categoryId: number
  categoryName?: string
  brand?: string
  mainImage: string
  subImages?: string[]
  detail?: string
  originPrice?: number
  minPrice: number
  sales: number
  viewCount: number
  status: number
  isHot: number
  isNew: number
  skuList: ProductSku[]
  createTime: string
}

/** 商品 SKU（ProductSkuVO） */
export interface ProductSku {
  id: number
  productId: number
  skuName: string
  image?: string
  price: number
  stock: number
  sales: number
  weight?: number
  sort: number
}

// ==================== 分类 ====================

/** 分类树节点（CategoryTreeVO） */
export interface CategoryTreeNode {
  id: number
  name: string
  parentId: number
  level: number
  sort: number
  icon?: string
  status: number
  children?: CategoryTreeNode[]
  createTime?: string
}

// ==================== 轮播图 ====================

/** 轮播图（BannerVO） */
export interface Banner {
  id: number
  title?: string
  image: string
  linkType: number // 0-不跳转 1-商品 2-分类 3-外链
  linkValue?: string
  sort: number
  status: number
  startTime?: string
  endTime?: string
  createTime?: string
  updateTime?: string
}

// ==================== 公告 ====================

/** 公告（NoticeVO） */
export interface Notice {
  id: number
  title: string
  content: string
  type: number // 0-普通 1-重要 2-活动
  isTop: number
  status: number
  startTime?: string
  endTime?: string
  viewCount: number
  publisherId?: number
  createTime: string
  updateTime?: string
}

// ==================== 购物车 ====================

/** 购物车整体（CartVO） */
export interface CartVO {
  items: CartItem[]
  totalCount: number
  selectedCount: number
  totalAmount: number
  selectedAmount: number
  allSelected: number // 0-未全选 1-全选
}

/** 购物车项（CartItemVO） */
export interface CartItem {
  id: number
  productId: number
  productName: string
  productImage: string
  skuId: number
  skuName: string
  skuImage?: string
  price: number
  quantity: number
  subtotal: number
  stock: number
  selected: number
  productStatus: number
}

// ==================== 收货地址 ====================

/** 地址（AddressVO） */
export interface Address {
  id: number
  receiver: string
  phone: string
  province?: string
  city?: string
  district?: string
  detail: string
  tag?: string
  isDefault: number
  fullAddress?: string
  createTime?: string
}

/** 地址新增/修改请求 */
export interface AddressSaveReq {
  id?: number
  receiver: string
  phone: string
  province?: string
  city?: string
  district?: string
  detail: string
  tag?: string
  isDefault?: number
}

// ==================== 订单 ====================

/** 订单详情（OrderDetailVO） */
export interface OrderDetail {
  id: number
  orderNo: string
  userId: number
  username?: string
  totalAmount: number
  freightAmount: number
  discountAmount: number
  couponAmount: number
  payAmount: number
  status: number
  statusText: string
  statusTagType: string
  receiverName: string
  receiverPhone: string
  receiverAddress: string
  remark?: string
  trackingCompany?: string
  trackingNo?: string
  payTime?: string
  deliverTime?: string
  receiveTime?: string
  cancelTime?: string
  createTime: string
  payChannel?: string
  payChannelText?: string
  payTradeNo?: string
  refundTradeNo?: string
  refundTime?: string
  refundReason?: string
  items: OrderItem[]
  totalQuantity: number
}

/** 订单商品项（OrderItemVO） */
export interface OrderItem {
  id: number
  productId: number
  productName: string
  productImage: string
  skuId: number
  skuName: string
  price: number
  quantity: number
  totalAmount: number
}

/** 提交订单请求 */
export interface OrderSubmitReq {
  items: { skuId: number; quantity: number }[]
  addressId: number
  couponId?: number
  remark?: string
}

// ==================== 优惠券 ====================

/** 优惠券模板（CouponVO） */
export interface Coupon {
  id: number
  name: string
  type: number // 0-满减 1-折扣 2-无门槛
  typeText?: string
  amount: number
  minAmount: number
  maxDiscount: number
  total: number // -1 不限量
  remain: number
  received?: number
  perLimit: number
  status: number
  statusText?: string
  startTime: string
  endTime: string
  validDays: number
  description?: string
  createTime?: string
  updateTime?: string
}

/** 用户领取记录（UserCouponVO） */
export interface UserCoupon {
  id: number
  userId: number
  username?: string
  nickname?: string
  couponId: number
  couponName: string
  couponType: number
  status: number // 0-未使用 1-已使用 2-已过期 3-已作废
  statusText?: string
  orderId?: number
  receiveTime: string
  useTime?: string
  expireTime: string
}

// ==================== 收藏 ====================

/** 收藏项（FavoriteVO） */
export interface Favorite {
  id: number
  productId: number
  productName: string
  productMainImage: string
  minPrice: number
  productStatus: number
  createTime: string
}

// ==================== 秒杀 ====================

/** 抢购活动（SeckillActivityVO） */
export interface SeckillActivity {
  id: number
  name: string
  cover?: string
  startTime: string
  endTime: string
  status: number // 0-未开始 1-进行中 2-已结束
  statusText?: string
  countdownSeconds: number
  description?: string
  products: SeckillProduct[]
}

/** 抢购活动商品（SeckillProductVO） */
export interface SeckillProduct {
  id: number
  activityId: number
  productId: number
  productName: string
  productImage: string
  skuId: number
  skuName: string
  originPrice: number
  seckillPrice: number
  discount: number
  seckillStock: number
  remainStock: number
  soldPercent: number
  perLimit: number
}

/** 抢购结果（SeckillResultVO） */
export interface SeckillResult {
  orderNo: string
  status: number // 0-排队中 1-成功 2-失败
  statusText: string
  message?: string
  mainOrderId?: number
}

// ==================== 客服聊天 ====================

/** 客服会话（ChatSessionVO） */
export interface ChatSession {
  id: number
  sessionNo: string
  userId: number
  username?: string
  nickname?: string
  avatar?: string
  adminId?: number
  adminName?: string
  status: number
  statusText?: string
  unreadCount: number
  lastMessage?: string
  lastTime?: string
  createTime: string
}

/** 客服会话详情 */
export interface ChatSessionDetail {
  session: ChatSession
  userSeq: number
  adminSeq: number
  closeTime?: string
}

/** 客服消息（ChatMessageVO） */
export interface ChatMessage {
  id: number
  sessionId: number
  seq: number
  senderId: number
  senderType: number // 0-用户 1-客服 2-系统
  type: string // text/image/file/product/system
  content: string
  extra?: string
  isRecalled: number
  createTime: string
}

// ==================== 文件 ====================

/** 文件上传返回（FileUploadVO） */
export interface FileUploadResult {
  id: number
  name: string
  url: string
  path: string
  size: number
  contentType: string
  bizType: string
  createTime: string
}
