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

import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.team.bd.BdTeamLeaderAddCmd;
import com.red.circle.other.inner.model.cmd.team.bd.BdTeamLeaderOpsPageQryCmd;
import com.red.circle.other.inner.model.dto.agency.bd.BdTeamInfoDTO;
import com.red.circle.other.inner.model.dto.agency.bd.BdTeamLeaderDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * bd leader 团队服务.
 *
 * @author pengliang on 2023/5/26
 */
public interface BdTeamLeaderClientService {

  /**
   * 获取bd leader信息.
   */
  BdTeamLeaderDTO getById(Long id);


  /**
   * 根据用户id 获取bd leader信息.
   */
  BdTeamLeaderDTO getByUserId(Long userId);

  /**
   * 获取bd团队中bd数量.
   */
  Long countBdByLeaderUserId(Long leadUserId);

  /**
   * 获取bd团队中bd列表.
   */
  List<BdTeamInfoDTO> listByLeaderUserId(Long leadUserId, Long lastId);

  /**
   * 添加bd leader.
   */
  void add(BdTeamLeaderAddCmd cmd);

  /**
   * 校验是否是BdLeader.
   *
   * @return true 是，false 不是
   */
  boolean check(Long leadUserId);

  /**
   * 获取leader分页列表（运营后台）
   */
  PageResult<BdTeamLeaderDTO> pageOps(BdTeamLeaderOpsPageQryCmd qryCmd);

  /**
   * 查询leader名下bd成员数量.
   */
  Map<Long, Long> mapCountByLeadUserIds(Set<Long> bdLeadUserIds);

  /**
   * 修改bd leader信息.
   */
  void updateLeaderSelectiveById(BdTeamLeaderDTO dto);

  /**
   * 获取团队下BD信息.
   */
  Map<Long, Long> mapTeamBdUserId(Set<Long> ids);

  /**
   * 移除leader.
   */
  void removeLeader(Long teamId, Long bdLeadUserId);

}
