package com.red.circle.console.app.service.app.team;

import com.red.circle.console.app.dto.clienobject.team.TeamMemberCO;
import com.red.circle.console.app.dto.clienobject.team.TeamMemberWorkCO;
import com.red.circle.other.inner.model.cmd.gift.SumAnchorTargetQryCmd;
import com.red.circle.other.inner.model.cmd.team.MemberTeamChangeCmd;
import com.red.circle.other.inner.model.cmd.team.TeamChangeOwnerCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberAddCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberBackQryCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberIdCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberRemarksCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberTargetResetCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberWorkQryCmd;
import com.red.circle.other.inner.model.dto.agency.agency.TeamProfileDTO;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import java.math.BigDecimal;
import java.util.List;

/**
 * 团队成员服务.
 *
 * @author pengliang on 2022/12/7
 */
public interface TeamMemberBackService {

  /**
   * 添加团队成员.
   */
  TeamProfileDTO addTeamMember(TeamMemberAddCmd cmd);

  /**
   * 修改成员备注.
   */
  void updateTeamMemberRemarks(TeamMemberRemarksCmd cmd);

  /**
   * 修改成员归属团队.
   */
  TeamMemberCO updateMemberTeam(MemberTeamChangeCmd cmd);

  /**
   * 移除团队成员.
   */
  void removeTeamMember(TeamMemberIdCmd cmd);

  /**
   * 检查当前成员目标情况.
   */
  BigDecimal checkTarget(SumAnchorTargetQryCmd query);

  /**
   * 查询当前成员修正幸运礼物后的目标情况.
   */
  BigDecimal checkTargetLuckyGift(SumAnchorTargetQryCmd query);

  /**
   * 重置最新进行中， 账单目标数(本月目标).
   */
  void resetUnpaidBillMemberTarget(TeamMemberTargetResetCmd cmd);

  /**
   * 团队成员.
   */
  List<TeamMemberCO> listTeamMember(Long teamId);

  /**
   * 成员列表.
   */
  List<TeamMemberCO> listTeamMember(TeamMemberBackQryCmd query);

  /**
   * 团队成员工作情况.
   */
  List<TeamMemberWorkCO> listMemberWork(TeamMemberWorkQryCmd query);

  /**
   * 变更团长(务必同区域或者团长不是主播代理).
   */
  UserProfileDTO changeTeamOwnUser(TeamChangeOwnerCmd cmd);

}
