import { request } from "@/http/axios"
import { PageDTO, ResponseData, BasePageQuery } from "../type"

export interface ShopGoodsDTO {
  goodsId?: number // 商品唯一ID
  goodsName?: string // 商品名称
  categoryId?: number // 分类ID
  externalGoodsId?: number // 外部归属类型的商品ID
  corpid?: string // 企业微信id
  categoryName?: string // 分类名称
  belongType?: number // 归属类型（0-借还柜 1-固资通）
  price?: number // 销售价格
  stock?: number // 库存数量
  status?: number // 商品状态（1上架 2下架）
  autoApproval?: number // 免审批（0否 1是）
  coverImg?: string // 封面图URL
  creatorId?: number // 创建者ID
  creatorName?: string // 创建者名称
  createTime?: string // 创建时间
  remark?: string // 备注
  cabinetName?: string // 柜机名称
  cellNo?: number // 格口号
  cellNoStr?: string // 格口号（字符串格式）
  totalStock?: number // 已分配库存
  shopNameStr?: string // 地址名称
  usageInstruction?: string // 商品使用说明
  monthlyPurchaseLimit?: number // 每人每月限购数量
  goodsDetail?: string // 商品详情（支持2000汉字+10个图片链接）
}

export interface SearchShopGoodsQuery extends BasePageQuery {
  goodsName?: string // 商品名称（模糊查询）
  categoryId?: number // 商品分类ID
  externalGoodsId?: number // 外部归属类型的商品ID
  corpid?: string // 企业微信id
  status?: number // 商品状态（1上架 2下架）
  autoApproval?: number // 免审批（0否 1是）
  minPrice?: number // 最低价格
  maxPrice?: number // 最高价格
  belongType?: number // 归属类型（0-借还柜 1-固资通）
  beginTime?: string // 开始时间（格式：yyyy-MM-dd）
  endTime?: string // 结束时间（格式：yyyy-MM-dd）
}

/**
 * 获取商品列表
 * 分页查询商品列表，支持多条件筛选和排序
 * @param query 查询参数（包含分页、筛选条件等）
 * @returns Promise<ResponseData<PageDTO<ShopGoodsDTO>>>
 */
export function getGoodsList(query: SearchShopGoodsQuery) {
  return request<ResponseData<PageDTO<ShopGoodsDTO>>>({
    url: "manage/goods/list",
    method: "get",
    params: query
  })
}

/**
 * 新增商品
 * 创建新商品
 * @param data 商品信息
 * @returns Promise<ResponseData<void>>
 */
export function addGoods(data: {
  goodsName: string // 商品名称（必填）
  categoryId?: number // 商品分类ID
  externalGoodsId?: number // 外部归属类型的商品ID
  corpid?: string // 企业微信id
  monthlyPurchaseLimit?: number // 每人每月限购数量
  price: number // 销售价格（必填）
  stock?: number // 库存数量
  status?: number // 商品状态（1上架 2下架）
  autoApproval?: number // 免审批（0否 1是）
  coverImg?: string // 封面图URL
  goodsDetail?: string // 商品详情（支持2000汉字+10个图片链接）
  remark?: string // 备注
  usageInstruction?: string // 商品使用说明
  belongType?: number // 归属类型（0-借还柜 1-固资通）
}) {
  return request<ResponseData<void>>({
    url: "manage/goods",
    method: "post",
    data
  })
}

/**
 * 删除商品
 * 批量删除商品
 * @param goodsIds 商品ID数组
 * @returns Promise<ResponseData<void>>
 */
export function deleteGoods(goodsIds: number[]) {
  return request<ResponseData<void>>({
    url: `manage/goods/${goodsIds.join(',')}`,
    method: "delete"
  })
}

/**
 * 修改商品
 * 更新商品信息
 * @param goodsId 商品ID（路径参数）
 * @param data 更新数据
 * @returns Promise<ResponseData<void>>
 */
export function updateGoods(goodsId: number, data: {
  goodsName?: string // 商品名称
  categoryId?: number // 商品分类ID
  externalGoodsId?: number // 外部归属类型的商品ID
  corpid?: string // 企业微信id
  monthlyPurchaseLimit?: number // 每人每月限购数量
  price?: number // 销售价格
  stock?: number // 库存数量
  status?: number // 商品状态（1上架 2下架）
  autoApproval?: number // 免审批（0否 1是）
  coverImg?: string // 封面图URL
  goodsDetail?: string // 商品详情（支持2000汉字+10个图片链接）
  remark?: string // 备注
  usageInstruction?: string // 商品使用说明
  belongType?: number // 归属类型（0-借还柜 1-固资通）
}) {
  return request<ResponseData<void>>({
    url: `manage/goods/${goodsId}`,
    method: "put",
    data
  })
}

/**
 * 获取单个商品信息
 * 根据商品ID获取商品的详细信息
 * @param goodsId 商品ID（查询参数）
 * @returns Promise<ResponseData<ShopGoodsDTO>>
 */
export function getGoodsInfo(goodsId: number) {
  return request<ResponseData<ShopGoodsDTO>>({
    url: "manage/goods/getGoodsInfo",
    method: "get",
    params: { goodsId }
  })
}