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

import com.red.circle.other.inner.model.cmd.team.TeamMemberWorkQryCmd;
import com.red.circle.other.inner.model.dto.agency.agency.TeamMemberTargetDTO;
import com.red.circle.other.inner.model.dto.agency.agency.TeamMemberWorkDTO;
import com.red.circle.other.inner.model.dto.agency.agency.TeamTargetBillRes;
import com.red.circle.other.inner.enums.team.TeamMemberTargetStatus;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

/**
 * 成员工作目标.
 *
 * @author pengliang on 2023/8/19
 */
public interface TeamMemberTargetClientService {

  /**
   * 累计减去接收礼物.
   */
  void decrAcceptGiftValue(Long userId, Integer dateNumber, Long giftValue);

  /**
   * 礼物流水.
   *
   * @param userId   用户lid
   * @param quantity 数量
   */
  TeamTargetBillRes incrementGiftValue(Long userId, BigDecimal quantity);

  /**
   * 个人房间流水.
   *
   * @param userId   用户lid
   * @param quantity 数量
   */
  void incrementRoomValue(Long userId, BigDecimal quantity);

  /**
   * 发送礼物数量.
   *
   * @param userId   用户lid
   * @param quantity 数量
   */
  void incrementSendGiftQuantity(Long userId, BigDecimal quantity);

  /**
   * 获取用户目标 >= billBelong 记录.
   */
  List<TeamMemberTargetDTO> listByBillBelong(Long teamId, Integer billBelong);

  List<TeamMemberWorkDTO> listMemberWork(TeamMemberWorkQryCmd query);

  void updateStatusByTeamIds(Set<Long> teamIds, TeamMemberTargetStatus status);

  /**
   * 获取最新进行中目标数量.
   */
  Long getLatestInProgressTarget(Long userId);


  /**
   * 移除用户目标.
   */
  void removeUserTarget(Integer billBelong, Long userId);
}
