package baidu

import (
	"encoding/json"
	"errors"
	"fmt"
	"github.com/smbrave/goutil"
)

type addressRsp struct {
	Status int `json:"status"`
	Result struct {
		FormattedAddress string `json:"formatted_address"`
	} `json:"result"`
}

type Lbs struct {
	ak string
}

func NewLbs(ak string) *Lbs {
	return &Lbs{
		ak: ak,
	}
}

func (l *Lbs) GetAddress(lng, lat float64) (string, error) {
	reqUrl := fmt.Sprintf("https://api.map.baidu.com/reverse_geocoding/v3/?ak=%s&output=json&coordtype=wgs84&location=%f,%f", l.ak, lat, lng)
	rspBody, err := goutil.HttpGet(reqUrl, nil)
	if err != nil {
		return "", err
	}
	var rsp addressRsp
	if err := json.Unmarshal(rspBody, &rsp); err != nil {
		return "", err
	}
	if rsp.Status != 0 {
		return "", errors.New(string(rspBody))
	}
	return rsp.Result.FormattedAddress, nil
}