package com.red.circle.other.infra.database.mongo.service.sys;

import com.red.circle.other.infra.database.mongo.dto.ActivityConfigRewards;
import com.red.circle.other.infra.database.mongo.entity.sys.ActivityConfig;
import com.red.circle.other.inner.model.cmd.sys.ActivityConfigBackQryCmd;
import java.util.List;

/**
 * 活动配置.
 *
 * @author pengliang on 2022/8/12
 */
public interface ActivityConfigService {

  /**
   * 添加，活动配置.
   */
  void add(ActivityConfig activityConfig);

  /**
   * 修改，活动配置.
   */
  void updateSelectiveById(ActivityConfig activityConfig);


  /**
   * 活动配置获取.
   */
  ActivityConfig getById(Long id);

  /**
   * 获取进行中的活动.
   */
  List<ActivityConfig> listProcessing(String sysOrigin, Long giftId);

  /**
   * 获取进行中活动的礼物id.
   */
  List<Long> listProcessingGiftIds(List<Long> activityIds);

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

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

  /**
   * 修改奖品信息.
   */
  void updateRewards(Long id, List<ActivityConfigRewards> butOneRewards,
      List<ActivityConfigRewards> butTwoRewards);

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

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

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

  ActivityConfig getShowcaseActivityConf(Long templateId, String activityType);

  List<ActivityConfig> listRecentlyEndedActivities(String sysOrigin, Integer limit);

  /**
   * 查询上架且进行中的活动
   * @param sysOrigin 系统来源
   * @return 活动配置列表
   */
  List<ActivityConfig> listOngoingActivities(String sysOrigin);
}
