package com.tashow.cloud.systemapi.api.dept;

import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.util.collection.CollectionUtils;
import com.tashow.cloud.systemapi.api.dept.dto.DeptRespDTO;
import com.tashow.cloud.systemapi.enums.ApiConstants;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = ApiConstants.NAME) // TODO 芋艿：fallbackFactory =
/** RPC 服务 - 部门 */
public interface DeptApi {

  String PREFIX = ApiConstants.PREFIX + "/dept";

  @GetMapping(PREFIX + "/get")
  /** 获得部门信息 */
  CommonResult<DeptRespDTO> getDept(@RequestParam("id") Long id);

  @GetMapping(PREFIX + "/list")
  /** 获得部门信息数组 */
  CommonResult<List<DeptRespDTO>> getDeptList(@RequestParam("ids") Collection<Long> ids);

  @GetMapping(PREFIX + "/valid")
  /** 校验部门是否合法 */
  CommonResult<Boolean> validateDeptList(@RequestParam("ids") Collection<Long> ids);

  /**
   * 获得指定编号的部门 Map
   *
   * @param ids 部门编号数组
   * @return 部门 Map
   */
  default Map<Long, DeptRespDTO> getDeptMap(Collection<Long> ids) {
    List<DeptRespDTO> list = getDeptList(ids).getCheckedData();
    return CollectionUtils.convertMap(list, DeptRespDTO::getId);
  }

  @GetMapping(PREFIX + "/list-child")
  /** 获得指定部门的所有子部门 */
  CommonResult<List<DeptRespDTO>> getChildDeptList(@RequestParam("id") Long id);
}
