package shop.alien.mapper.storePlantform;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import shop.alien.entity.storePlatform.StoreOperationalActivityAchievement;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseDetailVo;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseItemVo;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseVo;

import java.util.List;

/**
 * 运营活动成果 Mapper 接口
 *
 * @author system
 * @since 2025-01-XX
 */
@Mapper
public interface StoreOperationalActivityAchievementMapper extends BaseMapper<StoreOperationalActivityAchievement> {

    /**
     * 分页查询案例列表（同一用户同一活动最新成果）。
     *
     * @param page           分页
     * @param storeId        店铺ID（必填）
     * @param activityStatus 活动状态
     * @return 分页列表
     */
    IPage<StoreOperationalActivityAchievementCaseVo> selectCasePage(
            IPage<?> page,
            @Param("storeId") Integer storeId,
            @Param("activityStatus") Integer activityStatus);

    /**
     * 案例详情头部信息
     *
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 详情
     */
    StoreOperationalActivityAchievementCaseDetailVo selectCaseHeader(@Param("activityId") Integer activityId,
                                                                     @Param("userId") Integer userId);

    /**
     * 案例详情成果列表
     *
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 成果列表
     */
    List<StoreOperationalActivityAchievementCaseItemVo> selectCaseItems(@Param("activityId") Integer activityId,
                                                                        @Param("userId") Integer userId);

    /**
     * 商家端分页查询案例列表（按商户ID、活动状态、活动名称筛选）
     *
     * @param page 分页
     * @param storeId 商户ID
     * @param activityStatus 活动状态
     * @param activityName 活动名称（模糊查询）
     * @return 分页列表
     */
    IPage<StoreOperationalActivityAchievementCaseVo> selectStoreCasePage(
            IPage<?> page,
            @Param("storeId") Integer storeId,
            @Param("activityStatus") Integer activityStatus,
            @Param("activityName") String activityName);
}
