package api

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func (h *APIHandler) GeoAutocomplete(w http.ResponseWriter, r *http.Request) {

	pelias := h.config.GetString("geo.pelias.url")

	t, ok := r.URL.Query()["text"]

	if !ok || len(t[0]) < 1 {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	text := t[0]

	resp, err := http.Get(fmt.Sprintf("%s/autocomplete?text=%s", pelias, text))
	if err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)

	if err != nil {
		log.Fatal(err)
	}

	var response map[string]any
	jsonErr := json.Unmarshal(body, &response)
	if jsonErr != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

	j, err := json.Marshal(response["features"])
	if err != nil {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	w.WriteHeader(http.StatusOK)
	w.Header().Set("Content-Type", "application/json")
	w.Write(j)
}
