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

export interface CabinetCellQuery extends BasePageQuery {
  cabinetId?: number;
  cellNo?: number;
  cellType?: number;
  goodsName?: string;
}

export interface CabinetCellDTO {
  /** 格口唯一ID */
  cellId?: number;
  /** 关联柜机ID */
  cabinetId: number;
  /** 格口号 */
  cellNo: number;
  /** 针脚序号 */
  pinNo: number;
  /** 格口类型（1小格 2中格 3大格 4超大格） */
  cellType: number;
  /** 使用状态（1空闲 2已占用） */
  usageStatus: number;
  /** 可用状态（1正常 2故障） */
  availableStatus: number;
  /** 操作人 */
  operator?: string;
  /** 关联商品ID */
  goodsId?: number;
  /** 商品名称 */
  goodsName?: string;
  /** 商品价格 */
  price?: number;
  /** 商品封面图 */
  coverImg?: string;
  /** 库存数量 */
  stock?: number;
  /** 历史订单数量 */
  orderCount?: number;
  /** 商品价格 */
  cellPrice?: number;
  /** 是否已租用：0-未租用，1-已租用 */
  isRented?: number;
  /** 关联订单商品ID */
  orderGoodsId?: number;
  /** 关联订单ID */
  orderId?: number;
  /** 购买人姓名 */
  name?: string;
  /** 购买人手机号 */
  mobile?: string;
  /** 购买人人脸图片 */
  faceImg?: string;
  /** 购买人98ab用户ID */
  ab98UserId?: number;
  /** 密码字段 */
  password?: string;
}

export interface AddCabinetCellCommand {
  /** 关联柜机ID */
  cabinetId: number;
  /** 格口号 */
  cellNo: number;
  /** 针脚序号 */
  pinNo: number;
  /**
   * 关联主板ID
   */
  mainboardId: number;
  /** 格口类型（1小格 2中格 3大格 4超大格） */
  cellType: number;
  /** 使用状态（1空闲 2已占用） */
  usageStatus: number;
  /** 可用状态（1正常 2故障） */
  availableStatus: number;
  /** 密码字段 */
  password?: string;
}

export interface UpdateCabinetCellCommand extends AddCabinetCellCommand {
  usageStatus: number;
  availableStatus: number;
}

export const getCabinetCellList = (params?: CabinetCellQuery) => {
  return http.request<ResponseData<PageDTO<CabinetCellDTO>>>('get', '/cabinet/cell', {
    params
  });
};

export const addCabinetCell = (data: AddCabinetCellCommand) => {
  return http.request<ResponseData<void>>('post', '/cabinet/cell', {
    data
  });
};

export const updateCabinetCell = (cellId: number, data: UpdateCabinetCellCommand) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/${cellId}`, {
    data
  });
};

export const deleteCabinetCell = (ids: string) => {
  return http.request<ResponseData<void>>('delete', `/cabinet/cell/${ids}`);
};

export interface ConfigureGoodsCellsCommand {
  goodsId: number;
  cellId: number;
}

export const configureGoodsCells = (cellId: number, goodsId: number) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/configureGoodsCells/${cellId}/${goodsId}`);
};
export const configureGoodsCellsStock = (cellId: number, goodsId: number, stock: number) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/configureGoodsCellsStock/${cellId}/${goodsId}/${stock}`);
};
export const changeGoodsCellsStock = (cellId: number, stock: number) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/changeGoodsCellsStock/${cellId}/${stock}`);
};

export const clearGoodsCells = (cellId: number) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/clearGoodsCells/${cellId}`);
};

export const resetCellById = (cellId: number) => {
  return http.request<ResponseData<void>>('put', `/cabinet/cell/reset/${cellId}`);
};