package com.red.circle.other.infra.database.mongo.service.team.team;

import com.red.circle.other.infra.database.mongo.entity.team.team.TeamPolicyManager;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 团队策略.
 *
 * @author pengshigang on 2022/12/12
 */
public interface TeamPolicyManagerService {

  /**
   * 策略历史列表.
   *
   * @param sysOrigin 系统
   * @param region    区域
   * @return 策略
   */
  List<TeamPolicyManager> listSysOriginRegion(String sysOrigin, String region);

  /**
   * 获取指定系统区域政策.
   */
  List<TeamPolicyManager> listTeamPolicy(String sysOrigin, String region);

  /**
   * 获取指定系统区域政策.
   * @param policyType    策略类型 MONEY(美金政策)、SALARY_DIAMOND(工资钻石政策).
   */
  List<TeamPolicyManager> listTeamPolicyAndTypePolicy(String sysOrigin, String region, String policyType);

  /**
   * 获取指定系统区域政策.
   */
  List<TeamPolicyManager> listReleaseTeamPolicy(String sysOrigin, String region);

  /**
   * 根据区域，类型查询.
   *
   * @param sysOrigin 系统
   * @param region    区域
   * @return 策略
   */
  TeamPolicyManager getReleaseByRegionAndType(String sysOrigin, String region);

  /**
   * 根据区域，类型查询.
   *
   * @param sysOrigin 系统
   * @param region    区域
   * @param policyType    策略类型 MONEY(美金政策)、SALARY_DIAMOND(工资钻石政策).
   * @return 策略
   */
  TeamPolicyManager getReleaseByRegionAndType(String sysOrigin, String region, String policyType);

  /**
   * 获取区域已发布政策.
   */
  Map<String, TeamPolicyManager> mapRegionRelease(Set<String> regions);

  /**
   * 根据id查询对象.
   */
  TeamPolicyManager getById(Long id);

  /**
   * 添加策略.
   */
  void add(TeamPolicyManager policyManager);

  /**
   * 删除策略.
   *
   * @param id id.
   */
  void deleteById(Long id);

}
