package com.sikey.wa04.business.infrastructure.adapter.amap;

import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@Data
@ToString
@EqualsAndHashCode(callSuper = false)
public class AmapResponse {
    /**
     * 本次 API 访问状态，如果成功返回 1，如果失败返回 0。
     */
    @JsonAlias("status")
    private String status;
    /**
     * 访问状态值的说明，如果成功返回"ok"，失败返回错误原因，具体见 <a href="https://lbs.amap.com/api/webservice/guide/tools/info">错误码说明</a>。
     */
    private String info;

    /**
     * 返回状态说明,10000 代表正确,详情参阅 <a href="https://lbs.amap.com/api/webservice/guide/tools/info">info 状态表</a>
     */
    @JsonAlias("infocode")
    private String infoCode;

    /**
     * 返回的定位结果列表
     *
     * @see Position
     */
    private Position position;

    /**
     * 返回的地址描述, 地址元素列表
     *
     * @see AddressComponent
     */
    private AddressComponent addressComponent;

    @Data
    @ToString
    @EqualsAndHashCode(callSuper = false)
    public static class Position {
        /**
         * 定位结果坐标，如：116.473168,39.993015
         */
        private String location;
        /**
         * 定位精度半径，单位：米
         */
        private Integer radius;
    }

    @Data
    @ToString
    @EqualsAndHashCode(callSuper = false)
    public static class AddressComponent {
        /**
         * 国家
         */
        private String country;
        /**
         * 省份
         */
        private String province;
        /**
         * 城市
         */
        private String city;
        /**
         * 区
         */
        private String district;

        /**
         * 城市编码
         */
        @JsonAlias("citycode")
        private String cityCode;
        /**
         * 区域编码
         */
        @JsonAlias("adcode")
        private String adCode;

        /**
         * 附近街道名称
         */
        private String street;

        /**
         * 附近道路名称
         */
        private String road;

        /**
         * 周边 POI 名称
         */
        private String poi;
    }
}
