import { http } from "@/utils/http";

export interface OrderQuery extends BasePageQuery {
  /** 订单编号 */
  orderId?: number;
  /** 汇邦云用户ID */
  ab98UserId?: number;
  /**
   * 微信openid
   */
  openid?: string;
  /**
   * 企业微信用户ID或汇邦云用户ID
   */
  userid?: string;
  /** 柜机id */
  cabinetId?: number;
  /** 格口id */
  cellId?: number;
  goodsId?: number;
  /** 
   * 订单状态
   * @remarks 
   * 1-待付款 | 2-已付款 | 3-已发货 | 4-已完成 | 5-已取消
   */
  status?: number;
  /** 
   * 支付状态
   * @remarks 
   * 1-未支付 | 2-已支付 | 3-退款中 | 4-已退款
   */
  payStatus?: number;
  /** 订单开始时间（查询范围） */
  startTime?: string;
  /** 订单结束时间（查询范围） */
  endTime?: string;
  /** 支付时间（精确查询） */
  payTime?: string;
  /** 
 * 支付方式
 * @remarks 
 * wechat-微信支付 | balance-借呗支付
 */
  paymentMethod?: string;
  /**
   * 退款状态
   * @remarks
   * 0-未退款 | 1-已退款
   */
  returnStatus?: number;
}

export interface OrderDTO {
  /** 订单唯一ID */
  orderId: number;
  /** ucid */
  ucid?: string;
  /** openid */
  openid?: string;
  /** 支付网关交易id */
  tradeId?: string;
  /** 手机号码 */
  mobile?: string;
  /** 企业微信用户ID或汇邦云用户ID */
  userid?: string;
  /** 用户姓名 */
  name?: string;
  /** 
   * 是否内部用户
   * @remarks 
   * 0-否 | 1-汇邦云用户 | 2-企业微信用户
   */
  isInternal?: number;
  /** 业务系统订单ID（对接外部系统） */
  bizOrderId?: string;
  /** 订单总金额 */
  totalAmount: number;
  /** 
   * 订单状态
   * @remarks 
   * 1-待付款 | 2-已付款 | 3-已发货 | 4-已完成 | 5-已取消
   */
  status: number;
  /** 
   * 支付状态
   * @remarks 
   * 1-未支付 | 2-已支付 | 3-退款中 | 4-已退款
   */
  payStatus: number;
  /** 
   * 支付方式
   * @remarks 
   * wechat-微信支付 | balance-借呗支付
   */
  paymentMethod?: string;
  /** 支付时间 */
  payTime?: string;
  /**
   * 商品名称
   * @remarks
   * 多个商品名称用逗号分隔
   */
  goodsNames?: string;
  /**
   * 商品封面图
   * @remarks
   * 多个商品封面图用逗号分隔
   */
  coverImgs?: string;
  /**
   * 退还状态
   * @remarks
   * 0-未退还 | 1-已退还
   */
  returnStatus?: number;
}

export const getOrderListApi = (params?: OrderQuery) => {
  return http.request<ResponseData<PageDTO<OrderDTO>>>("get", "/shop/order/list", {
    params: {
      ...params,
      // 处理时间范围参数格式
      startTime: params?.startTime ? params.startTime : undefined,
      endTime: params?.endTime ? params.endTime : undefined,
      payTime: params?.payTime ? params.payTime : undefined
    }
  });
};

/** 批量导出订单 */
export const exportOrderExcelApi = (params: OrderQuery, fileName: string) => {
  return http.download("/shop/order/excel", fileName, {
    params: {
      ...params,
      // 处理时间范围参数格式
      startTime: params?.startTime ? params.startTime : undefined,
      endTime: params?.endTime ? params.endTime : undefined,
      payTime: params?.payTime ? params.payTime : undefined
    }
  });
};

export interface BorrowReturnRecordQuery extends BasePageQuery {
  /** 商品ID */
  goodsId?: number;
  /** 
   * 状态
   * @remarks 
   * 0-未退还 | 1-待审批 | 2-已通过 | 3-已驳回
   */
  status?: number;
}

export interface BorrowReturnRecordDTO {
  /** 订单ID */
  orderId: number;
  /** 审批ID */
  approvalId?: number;
  /** 订单创建时间 */
  orderTime?: Date;
  /** 归还时间 */
  returnTime?: Date;
  /** 审批时间 */
  auditTime?: Date;
  /** 归还图片 */
  returnImages?: string;
  /** 审核图片 */
  auditImages?: string;
  /** 订单商品价格 */
  goodsPrice: number;
  /** 支付方式 */
  paymentMethod?: string;
  /** 订单姓名 */
  orderName?: string;
  /** 订单手机号 */
  orderMobile?: string;
  /** 订单商品数量 */
  quantity: number;
  /** 审批人 */
  auditName?: string;
  /** 审核说明 */
  auditRemark?: string;
  /** 
   * 状态
   * @remarks 
   * 0-未退还 | 1-待审批 | 2-已通过 | 3-已驳回
   */
  status: number;
  /** 状态描述 */
  statusStr: string;
  /** 格口ID */
  cellId?: number;
  /** 格口号 */
  cellNo?: number;
  /** 柜机ID */
  cabinetId?: number;
  /** 柜机名称 */
  cabinetName?: string;
}

/** 获取借还记录分页列表 */
export const getBorrowReturnRecordListApi = (params?: BorrowReturnRecordQuery) => {
  return http.request<ResponseData<PageDTO<BorrowReturnRecordDTO>>>("get", "/shop/order/borrow-return-record", {
    params
  });
};

// 借还动态接口相关定义

export interface BorrowReturnDynamicQuery extends BasePageQuery {
  /** 商品ID */
  goodsId?: number;
  /** 格口ID，精确筛选 */
  cellId?: number;
  /** 
   * 状态筛选（仅对归还记录有效）
   * @remarks 
   * 0-未退还 | 1-待审批 | 2-已通过 | 3-已驳回 | 4-开柜中
   */
  status?: number;
  /** 
   * 动态类型筛选
   * @remarks 
   * 0-借出记录 | 1-归还记录
   */
  dynamicType?: number;
}

export interface BorrowReturnDynamicDTO {
  /** 订单商品ID */
  orderGoodsId: number;
  /** 动态类型（0-借出 1-归还） */
  dynamicType: number;
  /** 动态类型描述 */
  dynamicTypeStr: string;
  /** 订单ID */
  orderId: number;
  /** 订单创建时间/借出时间 */
  orderTime?: Date;
  /** 商品ID */
  goodsId: number;
  /** 商品名称 */
  goodsName: string;
  /** 商品单价 */
  goodsPrice: number;
  /** 数量 */
  quantity: number;
  /** 商品封面图 */
  coverImg?: string;
  /** 支付方式 */
  paymentMethod?: string;
  /** 订单姓名 */
  orderName?: string;
  /** 订单手机号 */
  orderMobile?: string;
  /** 格口ID */
  cellId?: number;
  /** 格口号 */
  cellNo?: number;
  /** 柜机ID */
  cabinetId?: number;
  /** 柜机名称 */
  cabinetName?: string;
  /** 归还/审批时间（归还记录时有效） */
  operateTime?: Date;
  /** 审批ID（归还记录时有效） */
  approvalId?: number;
  /** 审批状态（归还记录时有效） */
  status?: number;
  /** 状态描述 */
  statusStr?: string;
  /** 审批人（归还记录时有效） */
  auditName?: string;
  /** 审核说明（归还记录时有效） */
  auditRemark?: string;
  /** 归还图片（归还记录时有效） */
  images?: string;
  /** 审核图片（归还记录时有效） */
  auditImages?: string;
}

/** 获取借还动态分页列表 */
export const getBorrowReturnDynamicListApi = (params?: BorrowReturnDynamicQuery) => {
  return http.request<ResponseData<PageDTO<BorrowReturnDynamicDTO>>>("get", "/shop/order/borrow-return-dynamic", {
    params
  });
};