package org.xyzh.usercenter.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.usercenter.TbUserCollection;

import java.util.List;

/**
 * @description UserCollectionMapper.java文件描述 用户收藏数据访问层
 * @filename UserCollectionMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface UserCollectionMapper extends BaseMapper<TbUserCollection> {

    /**
     * @description 查询用户收藏列表
     * @param filter 过滤条件
     * @return List<TbUserCollection> 用户收藏列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserCollection> selectUserCollections(TbUserCollection filter);

    /**
     * @description 根据用户ID查询收藏记录
     * @param userId 用户ID
     * @return List<TbUserCollection> 收藏记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserCollection> selectByUserId(@Param("userID") String userID);

    /**
     * @description 根据用户ID和类型查询收藏记录
     * @param userId 用户ID
     * @param collectionType 收藏类型
     * @return List<TbUserCollection> 收藏记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserCollection> selectByUserIdAndType(@Param("userID") String userID, @Param("collectionType") Integer collectionType);

    /**
     * @description 根据用户ID查询收藏记录（包含用户基本信息）
     * @param userId 用户ID
     * @return List<TbUserCollection> 收藏记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserCollection> selectUserCollectionsWithUser(@Param("userID") String userID);

    /**
     * @description 查询用户收藏统计
     * @param userId 用户ID
     * @return TbUserCollection 收藏统计信息
     * @author yslg
     * @since 2025-10-15
     */
    TbUserCollection selectCollectionStatistics(@Param("userID") String userID);

    /**
     * @description 插入用户收藏
     * @param userCollection 用户收藏
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertUserCollection(TbUserCollection userCollection);

    /**
     * @description 更新用户收藏
     * @param userCollection 用户收藏
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateUserCollection(TbUserCollection userCollection);

    /**
     * @description 删除用户收藏
     * @param userCollection 用户收藏
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteUserCollection(TbUserCollection userCollection);

    /**
     * @description 批量插入用户收藏
     * @param userCollectionList 用户收藏列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertUserCollections(@Param("userCollectionList") List<TbUserCollection> userCollectionList);

    /**
     * @description 批量删除用户收藏
     * @param ids 收藏ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteUserCollections(@Param("ids") List<String> ids);

    /**
     * @description 分页查询用户收藏
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbUserCollection> 用户收藏列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserCollection> selectUserCollectionsPage(@Param("filter") TbUserCollection filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计用户收藏总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countUserCollections(@Param("filter") TbUserCollection filter);
}
