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


import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.common.business.dto.cmd.app.AppAccountCmd;
import com.red.circle.common.business.dto.cmd.app.AppIdLongCmd;
import com.red.circle.common.business.dto.cmd.app.AppIdStringCmd;
import com.red.circle.common.business.dto.cmd.app.AppRoomIdCmd;
import com.red.circle.common.business.dto.cmd.app.AppUserIdCmd;
import com.red.circle.other.app.dto.clientobject.team.*;
import com.red.circle.other.app.dto.cmd.team.*;
import com.red.circle.other.inner.enums.team.TeamUserIdentity;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import java.util.List;

/**
 * 团队服务.
 *
 * @author pengliang on 2022/12/6
 */
public interface TeamService {

  /**
   * 获取成员团队角色.
   */
  MemberEntryTeamCO entryTeam(AppExtCommand cmd);

  /**
   * 成员角色.
   */
  String getMemberRole(AppIdLongCmd cmd);

    /**
     * 用户信息
     * @param cmd
     * @return
     */
  UserProfileDTO getMemberProfile(AppExtCommand cmd);

  /**
   * 获取团队成员.
   */
  List<TeamMemberCO> listTeamMember(AppIdLongCmd cmd);

  /**
   * 团队成员数量
   */
  TeamMemberCountResultCO countTeamMember(AppIdLongCmd cmd);

  /**
   * 获取我的团队成员.
   */
  List<TeamOwnMemberCO> listTeamMember(AppExtCommand cmd);

  /**
   * 获取成员工作情况.
   */
  TeamMemberWorkCO getMemberWork(AppUserIdCmd cmd);

  /**
   * 用户工资结算结果.
   */
  TeamMemberTargetSettlementResultCO getSettlementResult(AppIdStringCmd cmd);

  /**
   * 团队账单.
   */
  List<TeamBillCO> listTeamBill(AppIdLongCmd cmd);

  /**
   * 团队账单.
   */
  TeamBillCO getTeamBillByBillId(AppIdLongCmd cmd);

  /**
   * 获取最新进行中目标。
   */
  String getLatestInProgressTarget(AppExtCommand cmd);

  /**
   * 获取账单工作成员信息.
   */
  List<TeamBillMemberWorkCO> listTeamBillWorkMembers(AppIdLongCmd cmd);

  /**
   * 用户申请加入团队.
   */
  String userApplyTeam(TeamUserApplyCmd cmd);

  /**
   * 团队是否存在等待审批消息.
   */
  String countTeamWaitApply(AppIdLongCmd cmd);

  /**
   * 用户取消退出申请-指定id.
   */
  void cancelUserApplyById(AppIdLongCmd cmd);

  /**
   * 用户取消加入申请-指定id.
   */
  void cancelUserJoinApplyById(AppIdLongCmd cmd);

  /**
   * 用户申请记录查询.
   */
  List<TeamUserApplyRecordCO> listUserApplyRecord(TeamUserApplyRecordQryCmd cmd);

  /**
   * 获取申请加入团队资料.
   */
  TeamWaitApplyMessageCO getWaitApplyTeamProfile(AppExtCommand cmd);

  /**
   * 处理用户申请.
   */
  String processUserApply(TeamHandleUserApplyCmd cmd);

  /**
   * 最新发布政策.
   */
  TeamPolicyManagerCO getReleasePolicy(AppIdLongCmd cmd);

  /**
   * 根据团队账号获得团队资料信息.
   */
  TeamProfileSearchResCO searchTeamByAccount(AppAccountCmd cmd);

  /**
   * 修改团队成员角色.
   */
  void changeMemberRole(TeamMemberRoleChangeCmd cmd);

  /**
   * 获取用户退出申请信息.
   */
  TeamQuitApplyInfoCO getUserQuitWaitApplyInfo(AppExtCommand cmd);

  /**
   * 领取政策道具奖励.
   */
  void policyPropsReward(AppIdLongCmd cmd);

  /**
   * 获取我的团长资料.
   */
  UserProfileDTO getTeamOwnUserProfile(AppExtCommand cmd);

  /**
   * 获取我的团队关联BD.
   */
  UserProfileDTO getTeamBdProfile(AppExtCommand cmd);

  /**
   * 修改成员提现状态.
   */
  void changeWalletWithdrawal(TeamMemberWalletWithdrawalCmd cmd);

  /**
   * 获取用户团队身份.
   */
  TeamUserIdentity getTeamUserIdentity(AppUserIdCmd cmd);

  /**
   * 我的工作情况统计.
   */
  List<AnchorWorkStatisticsCO> listMemberWorkStatistics(DateTypeQryCmd cmd);

    /**
     * 我的当天情况统计.
     */
  AnchorWorkStatisticsCO nowMemberWorkStatistics(DateTypeQryCmd cmd);


    /**
   * 是否是主播身份.
   *
   * @return true 是， false 不是
   */
  boolean checkAnchor(AppExtCommand cmd);

  /**
   * 上传心跳.
   */
  void heartbeat(AppRoomIdCmd cmd);

  /**
   * 获得主播退出团队要求.
   */
  TeamMemberQuitAskCO getMemberQuitAsk(AppExtCommand cmd);

  /**
   * 主播中心是否存在消息.
   */
  Boolean existsMessageTips(AppExtCommand cmd);

  void inviteHost(AgentInviteHostCmd cmd);

  void inviteHostCancel(String id);

  List<BdInviteMessageCO> listAgentInviteMessageOwn(BdInviteQryCmd cmd);

  void processBdInviteMessage(AgentInviteMessageProcessCmd cmd);

    List<TeamMemberCO> searchTeamMember(Long reqUserId, String account);
}
