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.TbBanner;

import java.util.List;

/**
 * @description BannerMapper.java文件描述 Banner数据访问层
 * @filename BannerMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface BannerMapper extends BaseMapper<TbBanner> {

    /**
     * @description 查询Banner列表
     * @param filter 过滤条件
     * @return List<TbBanner> Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbBanner> selectBanners(TbBanner filter);

    /**
     * @description 根据Banner ID查询Banner信息
     * @param bannerId Banner ID
     * @return TbBanner Banner信息
     * @author yslg
     * @since 2025-10-15
     */
    TbBanner selectByBannerId(@Param("bannerId") String bannerId);

    /**
     * @description 根据状态查询Banner列表
     * @param status 状态
     * @return List<TbBanner> Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbBanner> selectByStatus(@Param("status") Integer status);

    /**
     * @description 根据位置查询Banner列表
     * @param position 位置
     * @return List<TbBanner> Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbBanner> selectByPosition(@Param("position") String position);

    /**
     * @description 查询有效的Banner列表（按排序）
     * @return List<TbBanner> Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbBanner> selectActiveBanners();

    /**
     * @description 检查Banner标题是否存在
     * @param title Banner标题
     * @param excludeId 排除的Banner ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByTitle(@Param("title") String title, @Param("excludeId") String excludeId);

    /**
     * @description 插入Banner
     * @param banner Banner
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertBanner(TbBanner banner);

    /**
     * @description 更新Banner
     * @param banner Banner
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateBanner(TbBanner banner);

    /**
     * @description 删除Banner
     * @param banner Banner
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteBanner(TbBanner banner);

    /**
     * @description 批量插入Banner
     * @param bannerList Banner列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertBanners(@Param("bannerList") List<TbBanner> bannerList);

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

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

    /**
     * @description 统计Banner总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countBanners(@Param("filter") TbBanner filter);
}
