package com.liquidnet.client.admin.zhengzai.adam.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeClaimUserSearchParam;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeClaimUserVo;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeVo;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;

/**
 * 草莓护照-徽章管理
 */
public interface IAdamCaomeiBadgeAdminService extends IService<AdamCaomeiBadge> {

    /**
     * 徽章管理（每个徽章领取人数）
     * @param param
     * @return
     */
    PageInfo<AdamCaomeiBadgeVo> listWithClaimedCount(AdamCaomeiBadgeSearchParam param);

    /**
     * 徽章领取用户列表
     * @param param
     * @return
     */
    PageInfo<AdamCaomeiBadgeClaimUserVo> listClaimUsers(AdamCaomeiBadgeClaimUserSearchParam param);

    /**
     * 清除用户端「上架草莓徽章列表」Redis 缓存，与 adam 侧 {@code AdamRdmService#delPublishedCaomeiBadges} 一致。
     * 后台新增/编辑/上下架成功后应调用，避免用户端仍读到旧列表。
     */
    void delPublishedCaomeiBadges();

    /**
     * kylin 演出是否存在（performances_id）
     */
    boolean kylinPerformanceExists(String performancesId);

    /**
     * 是否存在与名称相同的其他徽章（trim 后精确匹配）
     *
     * @param name           徽章名称
     * @param excludeBadgeId 编辑时排除当前徽章 ID；新增传 null 或空
     */
    boolean existsOtherBadgeWithSameName(String name, String excludeBadgeId);
}
