package com.red.circle.other.inner.endpoint.user.region.api;

import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.cmd.user.SysRegionCmd;
import com.red.circle.other.inner.model.cmd.user.SysRegionConfigQryCmd;
import com.red.circle.other.inner.model.dto.user.reigon.RegionConfigDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 区域
 *
 * @author zongpubin on 2023/8/14
 */
public interface RegionConfigClientApi {

  String API_PREFIX = "/region-config/client";

  /**
   * 根据区域ID获取区域配置.
   */
  @GetMapping("/getRegion")
  ResultResponse<RegionConfigDTO> getRegionById(@RequestParam("regionId") String regionId);


  /**
   * 获取用户所在区域配置.
   */
  @GetMapping("/getRegionByUserId")
  ResultResponse<RegionConfigDTO> getRegionByUserId(@RequestParam("userId") Long userId);

  /**
   * 获取区域，扩展元数据.
   */
  @GetMapping("/getMetadata")
  ResultResponse<Map<String, String>> getMetadata(@RequestParam("regionId") String regionId);

  @GetMapping("/getRegionName")
  ResultResponse<String> getRegionName(@RequestParam("regionId") String regionId);

  @GetMapping("/mapRegionNameBySysOrigin")
  ResultResponse<Map<String, String>> mapRegionNameBySysOrigin(
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取区域名称.
   */
  @PostMapping("/mapRegionNameByRegionIds")
  ResultResponse<Map<String, String>> mapRegionNameByRegionIds(@RequestBody Set<String> regionIds);

  @PostMapping("/listByCondition")
  ResultResponse<List<RegionConfigDTO>> listByCondition(@RequestBody SysRegionConfigQryCmd query);

  @PostMapping("/add")
  ResultResponse<Void> add(@RequestBody SysRegionCmd config);

  @PostMapping("/update")
  ResultResponse<Void> update(@RequestBody SysRegionCmd config);

  @GetMapping("/resetWithdrawal")
  ResultResponse<Void> resetWithdrawal(@RequestParam("regionId") Long regionId);

  @PostMapping("/mapRegionIdByUserIds")
  ResultResponse<Map<Long, String>> mapRegionIdByUserIds(@RequestBody Set<Long> userIdSet);
}
