package org.xyzh.news.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.resource.TbResourceTag;
import org.xyzh.common.vo.TagVO;

import java.util.List;

/**
 * @description ResourceTagMapper.java文件描述 资源标签关联数据访问层
 * @filename ResourceTagMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface ResourceTagMapper extends BaseMapper<TbResourceTag> {

    /**
     * @description 查询资源标签关联列表
     * @param filter 过滤条件
     * @return List<TbResourceTag> 资源标签关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TagVO> selectResourceTags(TbResourceTag filter);

    /**
     * @description 根据关联ID查询关联信息
     * @param relationId 关联ID
     * @return TbResourceTag 关联信息
     * @author yslg
     * @since 2025-10-15
     */
    TbResourceTag selectByRelationId(@Param("relationId") String relationId);

    /**
     * @description 根据资源ID查询标签关联列表
     * @param resourceId 资源ID
     * @return List<TbResourceTag> 标签关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceTag> selectByResourceId(@Param("resourceId") String resourceId);

    /**
     * @description 根据标签ID查询资源关联列表
     * @param tagId 标签ID
     * @return List<TbResourceTag> 资源关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceTag> selectByTagId(@Param("tagId") String tagId);

    /**
     * @description 根据资源ID和标签ID查询关联信息
     * @param resourceId 资源ID
     * @param tagId 标签ID
     * @return TbResourceTag 关联信息
     * @author yslg
     * @since 2025-10-15
     */
    TbResourceTag selectByResourceIdAndTagId(@Param("resourceId") String resourceId, @Param("tagId") String tagId);

    /**
     * @description 检查资源标签关联是否存在
     * @param resourceId 资源ID
     * @param tagId 标签ID
     * @param excludeId 排除的关联ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByResourceIdAndTagId(@Param("resourceId") String resourceId, @Param("tagId") String tagId, @Param("excludeId") String excludeId);

    /**
     * @description 插入资源标签关联
     * @param resourceTag 资源标签关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertResourceTag(TbResourceTag resourceTag);

    /**
     * @description 更新资源标签关联
     * @param resourceTag 资源标签关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateResourceTag(TbResourceTag resourceTag);

    /**
     * @description 删除资源标签关联
     * @param resourceTag 资源标签关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteResourceTag(TbResourceTag resourceTag);

    /**
     * @description 批量插入资源标签关联
     * @param resourceTagList 资源标签关联列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertResourceTags(@Param("resourceTagList") List<TbResourceTag> resourceTagList);

    /**
     * @description 批量删除资源标签关联
     * @param ids 关联ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteResourceTags(@Param("ids") List<String> ids);

    /**
     * @description 根据资源ID批量删除标签关联
     * @param resourceId 资源ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteByResourceId(@Param("resourceId") String resourceId);

    /**
     * @description 根据标签ID批量删除资源关联
     * @param tagId 标签ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteByTagId(@Param("tagId") String tagId);

    /**
     * @description 分页查询资源标签关联
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbResourceTag> 资源标签关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceTag> selectResourceTagsPage(@Param("filter") TbResourceTag filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计资源标签关联总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countResourceTags(@Param("filter") TbResourceTag filter);
}
