package shop.alien.api.feign;

import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 调用高德接口
 *
 * @author ssk
 * @version 1.0
 * @date 2024/10/24 10:19
 */
@FeignClient(url = "https://restapi.amap.com/v3", name = "gaode")
public interface GaoDeFeign {

    /**
     * 高德-地理编码
     * 每日配额5000,并发每秒30
     * https://lbs.amap.com/api/webservice/guide/api/georegeo
     *
     * @param output  返回数据格式类型,可选输入内容包括：JSON，XML。设置 JSON 返回结果数据将会以 JSON 结构构成；如果设置 XML 返回结果数据将以 XML 结构构成。
     * @param address 结构化地址信息, 规则遵循：国家、省份、城市、区县、城镇、乡村、街道、门牌号码、屋邨、大厦，如：北京市朝阳区阜通东大街6号。
     * @param key     高德Key
     * @return JSONObject
     */
    @GetMapping("/geocode/geo")
                   JSONObject geo(@RequestParam(value = "output") String output,
                   @RequestParam(value = "address") String address,
                   @RequestParam(value = "key") String key);

    /**
     * 高德-逆地理编码
     * 每日配额5000,并发每秒30
     * https://lbs.amap.com/api/webservice/guide/api/georegeo
     *
     * @param output     返回数据格式类型, 可选输入内容包括：JSON，XML。设置 JSON 返回结果数据将会以 JSON 结构构成；如果设置 XML 返回结果数据将以 XML 结构构成。
     * @param location   经纬度坐标, 传入内容规则：经度在前，纬度在后，经纬度间以“,”分割，经纬度小数点后不要超过 6 位。
     * @param key        高德Key
     * @param radius     搜索半径, radius 取值范围：0~3000，默认值：1000。单位：米
     * @param extensions 返回结果控制, extensions 参数默认取值是 base，也就是返回基本地址信息；xtensions 参数取值为 all 时会返回基本地址信息、附近 POI 内容、道路信息以及道路交叉口信息。
     * @return JSONObject
     */
    @GetMapping("/geocode/regeo")
    JSONObject reGeo(@RequestParam(value = "output") String output,
                     @RequestParam(value = "location") String location,
                     @RequestParam(value = "key") String key,
                     @RequestParam(value = "radius") String radius,
                     @RequestParam(value = "extensions") String extensions);

    /**
     * 高德-天气查询
     * 每日配额300000,并发每秒200
     * https://lbs.amap.com/api/webservice/guide/api/weatherinfo
     *
     * @param output     返回数据格式类型, 可选输入内容包括：JSON，XML。设置 JSON 返回结果数据将会以 JSON 结构构成；如果设置 XML 返回结果数据将以 XML 结构构成。
     * @param key        高德Key
     * @param city       城市编码, 输入城市的 adcode，adcode 信息可参考 城市编码表
     * @param extensions 气象类型, 可选值：base/all, base:返回实况天气, all:返回预报天气
     * @return JSONObject
     */
    @GetMapping("/weather/weatherInfo")
    JSONObject weatherInfo(@RequestParam(value = "output") String output,
                           @RequestParam(value = "key") String key,
                           @RequestParam(value = "city") String city,
                           @RequestParam(value = "extensions") String extensions);

    /**
     * 高德-IP定位
     * 每日配额5000,并发每秒3
     * https://lbs.amap.com/api/webservice/guide/api/ipconfig
     *
     * @param ip  ip地址
     * @param key 高德Key
     * @return JSONObject
     */
    @GetMapping("/ip")
    JSONObject ip(@RequestParam(value = "ip") String ip,
                  @RequestParam(value = "key") String key);

}
