package com.fs.hisStore.mapper;

import com.fs.hisStore.domain.FsStoreProductUserEndCategory;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品-用户分端类关联 Mapper
 */
public interface FsStoreProductUserEndCategoryMapper {

    int insertBatch(@Param("productId") Long productId, @Param("categoryIds") List<Long> categoryIds);

    int deleteByProductId(Long productId);

    List<Long> selectCategoryIdsByProductId(Long productId);

    /** 按用户端分类ID删除关联（删除分类时调用） */
    int deleteByCategoryIds(@Param("categoryIds") Long[] categoryIds);

    /** 按用户端分类ID查询去重后的商品ID列表（用于分页，配合 PageHelper） */
    List<Long> selectDistinctProductIdsByCategoryId(@Param("categoryId") Long categoryId, @Param("keyword") String keyword);

    /** 关联表内全部去重商品ID（不按分类，配合 PageHelper 用于「全部」） */
    List<Long> selectDistinctProductIds(@Param("keyword") String keyword);

    /** 按区域位置查询商品ID：1=金刚区 2=瀑布区，配合 keyword 筛选，支持 storeId */
    List<Long> selectDistinctProductIdsByPosition(@Param("id") Long id,@Param("storeId") Long storeId, @Param("position") Integer position, @Param("keyword") String keyword);

    /** 更新指定分类下某商品的关联排序 */
    int updateRelSortByCategoryAndProduct(@Param("userEndCategoryId") Long userEndCategoryId,
                                          @Param("productId") Long productId,
                                          @Param("sort") long sort);

    /** 指定分类下，批量查询商品与关联 sort（管理端/App 指定分类列表用） */
    List<FsStoreProductUserEndCategory> selectSortByCategoryAndProductIds(@Param("userEndCategoryId") Long userEndCategoryId,
                                                                          @Param("productIds") List<Long> productIds);

    /** 按金刚区/瀑布区聚合：同一商品多条关联时取最大 sort（App 未指定分类时列表展示用） */
    List<FsStoreProductUserEndCategory> selectAggSortByPositionAndProductIds(@Param("storeId") Long storeId,
                                                                              @Param("position") Integer position,
                                                                              @Param("productIds") List<Long> productIds);

    /** 全部分类关联聚合：同一商品多条关联时取最大 sort（App「全部」列表展示用） */
    List<FsStoreProductUserEndCategory> selectAggSortGlobalAndProductIds(@Param("productIds") List<Long> productIds);
}
