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

import com.red.circle.other.inner.model.cmd.team.TeamBillByConditionQryCmd;
import com.red.circle.other.inner.model.cmd.team.TeamBillCycleBackQryCmd;
import com.red.circle.other.inner.model.cmd.team.TeamCalculatorWorkCmd;
import com.red.circle.other.inner.model.cmd.team.TeamMemberTargetResetCmd;
import com.red.circle.other.inner.model.dto.agency.agency.TeamBillAnchorStatisticsModelDTO;
import com.red.circle.other.inner.model.dto.agency.agency.TeamBillCycleDTO;
import com.red.circle.other.inner.model.dto.agency.agency.TeamCalculatorWorkResultDTO;
import com.red.circle.other.inner.model.dto.agency.agency.TeamRemark;
import com.red.circle.other.inner.enums.team.TeamBillCycleStatus;
import java.util.List;

/**
 * 团队账单.
 *
 * @author pengliang on 2023/10/17
 */
public interface TeamBillCycleClientService {

  /**
   * 获得最新账单ID.
   */
  Long getLatestBillIdByTeamId(Long teamId);

  List<TeamBillCycleDTO> listBillTable(TeamBillCycleBackQryCmd query);

  TeamCalculatorWorkResultDTO calculatorWork(TeamCalculatorWorkCmd param);

  void addInternalRemarks(Long id, TeamRemark remark);

  void removeInternalRemarks(Long id, String remarkId);

  void updateRemarks(Long id, String remarks);

  void updateStatus(Long billId, TeamBillCycleStatus status, Long updateUser);

  List<TeamBillAnchorStatisticsModelDTO> queryTeamBillByCondition(TeamBillByConditionQryCmd cmd);

  void resetUnpaidBillMemberTarget(TeamMemberTargetResetCmd param);

  void refreshUnpaidBills(TeamBillCycleBackQryCmd query);

  TeamBillCycleDTO getBillByTeamId(Long teamId);
}
