package com.ningdatech.pmapi.common.helper;


import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.sys.model.vo.RegionTreeVO;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * RegionCacheHelper -
 * </p>
 *
 * @author WendyYang
 * @since 13:50 2023/3/1
 */
public interface RegionCacheHelper {


    /**
     * 获取完整的区域树状结构
     *
     * @return /
     */
    List<RegionDTO> all();

    /**
     * 根据区域code 区域层级获取 区域类
     *
     * @param code  区域编码
     * @param level 区域层级
     * @return {@link RegionDTO}
     */
    RegionDTO getByCodeAndLevel(String code, int level);

    /**
     * 获取区域名称
     *
     * @param code  区域编码
     * @param level 区域层级
     * @return 名称
     */
    String getRegionName(String code, int level);

    /**
     * 根据传入的地区code与level获取所有上层地区集合
     * 按照level升序排列
     *
     * @param code  地区编码
     * @param level 地区层级
     * @return /
     */
    List<RegionDTO> listParents(String code, int level);

    /**
     * 根据传入的地区code与level获取所有子区域集合
     *
     * @param code  地域编码
     * @param level 地域层级
     * @return 所有子区域（包含自己）
     * @author WendyYang
     **/
    List<RegionDTO> listChildren(String code, int level);

    /**
     * 获取当前区域所有的子区域（包括自己）
     *
     * @param code  区域编码
     * @param level 级别
     * @return /
     */
    Collection<String> listChildRegionCodeList(String code, int level);

    /**
     * 获取当前节点开始的区域树
     *
     * @param regionCode  区域编码
     * @param regionLevel 区域层级
     * @return 区域树
     */
    RegionTreeVO getRegionTree(String regionCode, Integer regionLevel);

    /**
     * 获取展示名称（浙江省/杭州市/滨江区）
     *
     * @param regionCode  区域编码
     * @param regionLevel 区域层级
     * @return java.lang.String
     **/
    String getFullDisplayName(String regionCode, Integer regionLevel);

    /**
     * 获取展示名称（杭州市/滨江区）
     *
     * @param regionCode  区域编码
     * @param regionLevel 区域层级
     * @return java.lang.String
     **/
    String getDisplayName(String regionCode, Integer regionLevel);

}
