package com.red.circle.other.app.inner.service.sys;

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.other.inner.model.cmd.activity.lottery.ActivityLotteryTurntableCache;
import com.red.circle.other.inner.model.cmd.sys.ActivityConfigBackQryCmd;
import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO;
import com.red.circle.other.inner.model.dto.sys.ActivityConfigRewardsInfoDTO;
import com.red.circle.other.inner.model.dto.sys.ActivityTemplateDTO;
import com.red.circle.other.inner.model.dto.sys.ActivityTemplateValueDTO;
import com.red.circle.other.inner.model.dto.sys.SysActivityCountDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author zongpubin on 2023/10/10
 */
public interface SysActivityConfigClientService {

  /**
   * 获取模版数据.
   */
  List<ActivityTemplateDTO> listActivityTemplate(Long id, Long lastId, Integer pageSize);

  /**
   * 获取指定模版.
   */
  ActivityTemplateDTO getTemplateById(Long id);

  /**
   * 获取模版数据 id -> name.
   */
  List<ActivityTemplateValueDTO> listValues();

  /**
   * 添加模版.
   */
  void saveTemplate(ActivityTemplateDTO param);

  /**
   * 修改模版.
   */
  void updateTemplateById(ActivityTemplateDTO param);

  /**
   * 修改模版-名称.
   */
  void updateTemplateName(Long id, String name, Long updateUser);

  /**
   * 添加，活动配置.
   */
  void saveActivityConf(ActivityConfigDTO param);

  /**
   * 活动配置获取.
   */
  ActivityConfigDTO getActivityConfigById(Long id);

  /**
   * 修改，活动配置.
   */
  void updateSelectiveById(ActivityConfigDTO param);

  /**
   * 查询活动配置.
   */
  List<ActivityConfigDTO> listActivityConf(ActivityConfigBackQryCmd query);

  /**
   * 查询有效的活动配置
   */
  ActivityConfigDTO getEffectiveActivityConf(ActivityConfigBackQryCmd query);

  ActivityConfigDTO getShowcaseActivityConf(Long templateId, String activityType);

  /**
   * 获取模版信息.
   */
  Map<Long, ActivityTemplateValueDTO> mapByIds(Set<Long> collect);

  /**
   * 获取活动排名.
   */
  List<SysActivityCountDTO> listRank(Long activityId, String type, Integer size);

  /**
   * 修改奖品信息.
   */
  void updateRewards(ActivityConfigRewardsInfoDTO activityConfigRewardsInfoDTO);

  /**
   * 修改全部已发送状态.
   */
  void updateAwardStatusTrue(Long id);

  /**
   * 添加已发送标记.
   */
  void updateButOneRewardsStatusTrue(Long id, Long rewardId);

  /**
   * 添加已发送标记.
   */
  void updateButTwoRewardsStatusTrue(Long id, Long rewardId);

  /**
   * 添加转盘配置.
   *
   * @param sysOrigin 平台
   * @param cache     缓存
   */
  void addLotteryTurntable(SysOriginPlatformEnum sysOrigin,
      ActivityLotteryTurntableCache cache);

  /**
   * 获取转盘.
   *
   * @param sysOrigin 平台
   * @return cache
   */
  ActivityLotteryTurntableCache getLotteryTurntable(SysOriginPlatformEnum sysOrigin);
}
