package com.haha.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.entity.Product;

import java.util.List;
import java.util.Map;

public interface ProductService extends IService<Product> {
    
    /**
     * 分页查询商品列表
     *
     * @param page       页码
     * @param pageSize   每页条数
     * @param name       商品名称
     * @param barcode    条码
     * @param category   分类
     * @param syncStatus 同步状态
     * @return 分页结果
     */
    IPage<Product> getPage(int page, int pageSize, String name, String barcode, 
                           String category, Integer syncStatus);
    
    /**
     * 获取商品详情（带标签填充）
     *
     * @param id 商品ID
     * @return 商品详情
     */
    Product getDetailById(Long id);
    
    /**
     * 获取商品统计数据
     *
     * @return 统计数据
     */
    Map<String, Object> getStatistics();
    
    /**
     * 添加商品
     *
     * @param product 商品信息
     * @return 添加后的商品
     */
    Product add(Product product);
    
    /**
     * 编辑商品
     *
     * @param id      商品ID
     * @param product 商品信息
     * @return 编辑后的商品
     */
    Product edit(Long id, Product product);
    
    /**
     * 删除商品（软删除）
     *
     * @param id 商品ID
     * @return 是否成功
     */
    boolean softDelete(Long id);
    
    /**
     * 同步商品到哈哈平台
     *
     * @param id 商品ID
     * @return 是否成功
     */
    boolean syncToHaha(Long id);
    
    /**
     * 根据设备ID获取商品列表
     */
    List<Product> getProductListBydeviceId(String deviceId);
    
    /**
     * 根据分类ID获取商品列表
     */
    List<Product> getProductListByCategory(Integer categoryId);
    
    /**
     * 根据条码获取商品
     */
    Product getProductByBarcode(String barcode);
    
    /**
     * 根据商品编码获取商品
     */
    Product getProductByCode(String code);

    /**
     * 根据商品编码列表批量查询商品
     */
    List<Product> listByCodes(java.util.Collection<String> codes);

    /**
     * 更新同步状态
     */
    boolean updateSyncStatus(Long productId, Integer syncStatus);

    /**
     * 查询商品总库列表（调用哈哈平台API）
     *
     * @param page        页码
     * @param pageSize    每页条数
     * @param barcode     条形码（可选）
     * @param code        商品编码（可选）
     * @param productName 商品名称（可选）
     * @param deviceAdapt 适用设备（可选）
     * @return 商品总库分页数据
     */
    Map<String, Object> getMasterProductList(int page, int pageSize, String barcode,
                                              String code, String productName, String deviceAdapt);

    /**
     * 添加商品到商家商品库（调用哈哈平台API）
     *
     * @param codeList 商品编码列表，多个用逗号隔开
     * @return 是否成功
     */
    boolean addToMerchant(String codeList);

    /**
     * 商品上下架控制
     *
     * @param deviceId  设备SN号
     * @param goodsCode 商品code，多个用逗号隔开
     * @param salesType 上下架类型：IN上架，OUT下架
     * @param callType  更新方式：CHANGE更新模式，COVER覆盖模式
     * @return 操作结果
     */
    Map<String, Object> setProductShelfStatus(String deviceId, String goodsCode, String salesType, String callType);

    /**
     * 查询商品ID对应关系
     *
     * @param codeList 哈哈商品编号列表，多个用逗号隔开
     * @return 对应关系信息
     */
    Map<String, Object> getIdMapping(String codeList);
}
