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

/**
 * API 响应结果类型
 */
type Result = {
  code: number;
  message: string;
  data?: any;
};

/**
 * 分页查询响应结果类型
 */
type ResultTable = {
  code: number;
  message: string;
  data?: {
    list: Array<any>;
    total: number;
    pageSize: number;
    currentPage: number;
  };
};

/**
 * 商品项类型定义（对应哈哈平台层模板中的商品数据结构）
 * GoodsItem type definition matching Haha platform layer template product structure
 */
export interface GoodsItem {
  /** 商品code（哈哈平台商品编码） / Product code from Haha platform */
  key?: string;

  /** 商品名称 / Product name */
  label?: string;

  /** 库存/标准库存 / Stock quantity */
  stock?: number;

  /** 商品分类 / Product category */
  type?: string;

  /** 商品图片URL / Product image URL */
  pic?: string;

  /** 商品售价 / Product selling price */
  c_price?: string;

  /** 是否折扣 / Whether on discount */
  discount?: string;

  /** 优惠价/活动价 / Discount price */
  dis_price?: string;

  /** 算法识别图 / Algorithm recognition image */
  rec_pic?: string;
}

/**
 * 楼层配置类型定义（对应哈哈平台层模板中每一层的数据结构）
 * FloorConfig type definition matching Haha platform layer template floor structure
 */
export interface FloorConfig {
  /** 层号（从1开始） / Floor number (starting from 1) */
  floor?: number;

  /** 该层商品列表 / Product list on this floor */
  goods?: GoodsItem[];
}

/**
 * 层模版类型定义（匹配后端 LayerTemplate 实体）
 * LayerTemplate type definition matching backend LayerTemplate entity
 */
export interface LayerTemplate {
  /** 主键ID / Primary key ID */
  id?: number;

  /** 模板ID（哈哈平台返回） / Template ID from Haha platform */
  templateId?: string;

  /** 设备ID（SN号） / Device ID (SN number) */
  deviceId?: string;

  /** 模板名称 / Template name */
  templateName?: string;

  /** 设备类型 / Device type */
  deviceType?: number;

  /** 机柜层数 / Cabinet shelf number */
  shelfNum?: number;

  /** 左门层数据（JSON字符串） / Left door floor data (JSON string) */
  leftFloors?: string;

  /** 右门层数据（JSON字符串） / Right door floor data (JSON string) */
  rightFloors?: string;

  /** 商品规则 / Goods rule */
  goodsRule?: string;

  /** 同步状态 (0-未同步, 1-同步中, 2-已同步, 3-同步失败) */
  syncStatus?: number;

  /** 同步状态标签 / Sync status label */
  syncStatusLabel?: string;

  /** 同步状态颜色 / Sync status color */
  syncStatusColor?: string;

  /** 模版类型: LAYER-层模版, CABINET-柜模版 / Template type: LAYER or CABINET */
  templateType?: string;

  /** 模版类型展示标签 / Template type display label */
  templateTypeLabel?: string;

  /** 设备类型名称 / Device type name */
  deviceTypeName?: string;

  /** 左门层数据展示（格式化JSON） / Left door floor data display */
  leftFloorsDisplay?: string;

  /** 右门层数据展示（格式化JSON） / Right door floor data display */
  rightFloorsDisplay?: string;

  /** 总楼层数 / Total floor count */
  totalFloors?: number;

  /** 最后同步时间 / Last sync time */
  lastSyncTime?: string;

  /** 商品规则展示 / Goods rule display */
  goodsRuleDisplay?: string;

  /** 最后同步时间 / Sync time */
  syncTime?: string;

  /** 状态文本 / Status text */
  statusText?: string;

  /** 创建时间 / Create time */
  createTime?: string;

  /** 更新时间 / Update time */
  updateTime?: string;
}

/**
 * 分页查询参数类型
 * Query parameters type for paginated layer template list query
 */
export interface LayerTemplateQueryParams {
  /** 当前页码 / Current page number */
  page?: number;

  /** 每页大小 / Page size */
  pageSize?: number;

  /** 模版名称（模糊搜索） / Template name (fuzzy search) */
  templateName?: string;

  /** 模版编码 / Template code */
  templateCode?: string;

  /** 设备ID / Device ID */
  deviceId?: number;

  /** 同步状态 / Sync status */
  syncStatus?: number;

  /** 模版类型: LAYER-层模版, CABINET-柜模版 / Template type */
  templateType?: string;

  /** 状态 / Status */
  status?: number;
}

/**
 * 批量同步请求参数
 * Batch sync request parameters
 */
export type BatchSyncRequest = string[];

/**
 * 分页查询层模版列表
 * Get paginated layer template list
 * @param params - 查询参数 / Query parameters
 * @returns Promise<ResultTable> - 包含分页数据的响应结果 / Response result with pagination data
 */
export const getLayerTemplateList = (params: LayerTemplateQueryParams) => {
  return http.request<ResultTable>("get", "/layer-templates/list", { params });
};

/**
 * 获取层模版详情
 * Get layer template details by ID
 * @param id - 层模版ID / Layer template ID
 * @returns Promise<Result> - 包含层模版详情的响应结果 / Response result with layer template details
 */
export const getLayerTemplateById = (id: number) => {
  return http.request<Result>("get", `/layer-templates/${id}`);
};

/**
 * 根据设备ID获取层模版
 * Get layer template by device ID
 * @param deviceId - 设备ID / Device ID
 * @returns Promise<Result> - 包含设备层模版的响应结果 / Response result with device's layer template
 */
export const getLayerTemplateByDeviceId = (deviceId: number) => {
  return http.request<Result>("get", `/layer-templates/device/${deviceId}`);
};

/**
 * 创建层模版
 * Create a new layer template
 * @param data - 层模版数据 / Layer template data
 * @returns Promise<Result> - 创建结果的响应 / Response result of creation
 */
export const createLayerTemplate = (data: any) => {
  return http.request<Result>("post", "/layer-templates", { data });
};

/**
 * 更新层模版
 * Update an existing layer template
 * @param id - 层模版ID / Layer template ID
 * @param data - 更新数据 / Update data
 * @returns Promise<Result> - 更新结果的响应 / Response result of update
 */
export const updateLayerTemplate = (id: number, data: any) => {
  return http.request<Result>("put", `/layer-templates/${id}`, { data });
};

/**
 * 删除层模版
 * Delete a layer template by ID
 * @param id - 层模版ID / Layer template ID
 * @returns Promise<Result> - 删除结果的响应 / Response result of deletion
 */
export const deleteLayerTemplate = (id: number) => {
  return http.request<Result>("delete", `/layer-templates/${id}`);
};

/**
 * 同步单个层模版
 * Sync layer template from Haha platform for specific device
 * @param deviceId - 设备ID / Device ID (SN number)
 * @returns Promise<Result> - 同步结果的响应 / Response result of sync operation
 */
export const syncLayerTemplate = (deviceId: string) => {
  return http.request<Result>("post", `/layer-templates/${deviceId}/sync`);
};

/**
 * 批量同步层模版
 * Batch sync multiple layer templates from Haha platform
 * @param deviceIds - 设备ID列表 / List of device IDs (SN numbers) to sync
 * @returns Promise<Result> - 批量同步结果的响应 / Response result of batch sync operation
 */
export const batchSyncLayerTemplates = (deviceIds: BatchSyncRequest) => {
  return http.request<Result>("post", "/layer-templates/sync/batch", { data: deviceIds });
};
