package org.xyzh.api.news.banner;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.resource.TbBanner;

import java.util.List;

/**
 * @description Banner服务接口
 * @filename BannerService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface BannerService {

    /**
     * @description 获取Banner列表
     * @param status 状态（可选）
     * @return ResultDomain<TbBanner> Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> getBannerList(Integer status);

    /**
     * @description 根据ID获取Banner详情
     * @param bannerID BannerID
     * @return ResultDomain<TbBanner> Banner详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> getBannerById(String bannerID);

    /**
     * @description 创建Banner
     * @param banner Banner信息
     * @return ResultDomain<TbBanner> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> createBanner(TbBanner banner);

    /**
     * @description 更新Banner
     * @param banner Banner信息
     * @return ResultDomain<TbBanner> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> updateBanner(TbBanner banner);

    /**
     * @description 删除Banner
     * @param bannerID BannerID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteBanner(String bannerID);

    /**
     * @description 更新Banner状态
     * @param bannerID BannerID
     * @param status 状态
     * @return ResultDomain<TbBanner> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> updateBannerStatus(String bannerID, Integer status);

    /**
     * @description 更新Banner排序
     * @param bannerID BannerID
     * @param orderNum 排序号
     * @return ResultDomain<TbBanner> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> updateBannerOrder(String bannerID, Integer orderNum);

    /**
     * @description 获取启用的Banner列表（按排序号排序）
     * @param limit 限制数量（可选）
     * @return ResultDomain<TbBanner> 启用的Banner列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbBanner> getActiveBanners(Integer limit);

    /**
     * @description 批量更新Banner排序
     * @param bannerOrders Banner排序信息（BannerID -> 排序号）
     * @return ResultDomain<Boolean> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> batchUpdateBannerOrder(java.util.Map<String, Integer> bannerOrders);
}
