package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseDetailVo;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseVo;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementVo;
import shop.alien.entity.storePlatform.vo.StoreOperationalActivityCasePreviewVo;
import shop.alien.store.dto.StoreOperationalActivityAchievementDto;

import java.util.List;

/**
 * 运营活动成果服务
 *
 * @author system
 * @since 2025-01-XX
 */
public interface StoreOperationalActivityAchievementService {

    /**
     * 新增成果
     *
     * @param dto 请求参数
     * @return 是否成功
     */
    boolean addAchievement(StoreOperationalActivityAchievementDto dto);

    /**
     * 成果详情
     *
     * @param id 主键
     * @return 详情
     */
    StoreOperationalActivityAchievementVo getAchievementDetail(Integer id);

    /**
     * 成果列表
     *
     * @param activityId 活动ID
     * @param userId 用户ID
     * @param signupId 报名ID
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return 分页列表
     */
    IPage<StoreOperationalActivityAchievementVo> listAchievements(Integer activityId, Integer userId, Integer signupId,
                                                                  Integer pageNum, Integer pageSize);

    /**
     * 案例列表（同一用户同一活动最新成果）
     *
     * @param activityStatus 活动状态
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return 分页列表
     */
    IPage<StoreOperationalActivityAchievementCaseVo> listCasePage(Integer storeId, Integer activityStatus, Integer pageNum, Integer pageSize);

    /**
     * 案例卡片概览：列表默认返回一条，外层带案例总数。
     * 每条为某活动下某用户的最新更新成果，包含首图/视频、昵称、更新时间。
     *
     * @param storeId 店铺ID
     * @return 含 list（默认1条）与 total（总数）
     */
    StoreOperationalActivityCasePreviewVo listCasePreview(Integer storeId);

    /**
     * 案例详情
     *
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 详情
     */
    StoreOperationalActivityAchievementCaseDetailVo getCaseDetail(Integer activityId, Integer userId);

    /**
     * 商家端案例列表（按商户ID、活动状态、活动名称筛选）
     *
     * @param storeId 商户ID
     * @param activityStatus 活动状态
     * @param activityName 活动名称（模糊查询）
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return 分页列表
     */
    IPage<StoreOperationalActivityAchievementCaseVo> listStoreCasePage(Integer storeId, Integer activityStatus,
                                                                        String activityName, Integer pageNum, Integer pageSize);
}
