package com.ankaibei.workFlow.webadmin.utils;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.ankaibei.workFlow.webadmin.config.ApplicationConfig;
import com.ankaibei.workFlow.webadmin.upms.service.SysRegionService;
import com.ankaibei.workflow.vo.AreaInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import javax.annotation.PostConstruct;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;

@Component
public class GaoDeWebUtil {

    @Autowired
    private ApplicationConfig applicationConfig;

    @Autowired
    private SysRegionService sysRegionService;

    public  static   SysRegionService   regionService;
    public static String key = "1038f05a58704762e009c8e726226c26";

    public final static String areaPath = "https://restapi.amap.com/v3/config/district?keywords=%s&subdistrict=%d&key=%s";

    @PostConstruct
    private void init() {
        GaoDeWebUtil.key = applicationConfig.getGdKey();
        GaoDeWebUtil.regionService = sysRegionService;
    }


    /*
     keywords     中华人民共和国   规则：只支持单个关键词语搜索关键词支持：行政区名称、citycode、adcode
                                例如，在subdistrict=2，搜索省份（例如山东），能够显示市（例如济南），区（例如历下区）
     subdistrict  1             规则：设置显示下级行政区级数（行政区级别包括：国家、省/直辖市、市、区/县4个级别）
                                可选值：0、1、2、3
                                0：不返回下级行政区；
                                1：返回下一级行政区；
                                2：返回下两级行政区；
                                3：返回下三级行政区；
    * */

    /**
     * 根据关键字模糊查询行政区域信息
     *
     * @param keywords
     * @param subdistrict
     * @return
     */
    public static List<AreaInfo> getInfoLikeKeywordsAndSubdistrict(String keywords, Integer subdistrict) {
        String format = String.format(areaPath, keywords, subdistrict, key);
        String result = HttpUtil.get(format);
        if (!StringUtils.isBlank(result)) {
            Map<String, Object> map = JSON.parseObject(result, Map.class);
            if (!ObjectUtils.isEmpty(map)
                    && !ObjectUtils.isEmpty(map.get("status"))
                    && map.get("status").toString().equals("1")) {
                Object districts = map.get("districts");
                if (!ObjectUtils.isEmpty(districts)) {
                    List<AreaInfo> areaInfos = JSON.parseArray(JSON.toJSONString(districts), AreaInfo.class);
                    return areaInfos;
                }
            }
        }
        return null;
    }


    /**
     * 获取全部省份
     * @return
     */
    public static List<AreaInfo> getProvinces() {
        List<AreaInfo> country = getInfoLikeKeywordsAndSubdistrict("中华人民共和国", 1);
        if (!ObjectUtils.isEmpty(country)) {
            return country.get(0).getDistricts();
        }
        return null;
    }

    /**
     * 根据关键字获取下级城市
     * @param keywords
     * @return
     */
    public static List<AreaInfo> getCity(String keywords) {
        List<AreaInfo> country = getInfoLikeKeywordsAndSubdistrict(keywords, 1);
        if (!ObjectUtils.isEmpty(country)) {
            if (country.size() > 1 ) {
                for (AreaInfo areaInfo : country) {
                    if(areaInfo.getLevel().equals("city")){
                        return areaInfo.getDistricts();
                    }
                }
            }
          return country.get(0).getDistricts();
        }
        return null;
    }

    // 初始化行政区域   - 每次调用前，先手动清空work_sys_region 表数据
    public static void initRegion(){
        List<AreaInfo> list = getInfoLikeKeywordsAndSubdistrict("中华人民共和国", 3);
//        System.out.println(JSON.toJSONString(list));
        regionService.insertAll(list);
    }

    public static void main(String[] args) {
        List<AreaInfo> list = getInfoLikeKeywordsAndSubdistrict("中华人民共和国", 3);
//        List<AreaInfo> list =  getProvinces();
//        List<AreaInfo> list = getCity("北京");
        System.out.println(list);
    }
}
