using Mapbox.Unity;
using UnityEngine;
using UnityEngine.UI;
using System;
using Mapbox.Geocoding;
using Mapbox.Utils;

[RequireComponent(typeof(InputField))]
public class ForwardGeocodeUserInput : MonoBehaviour
{
	InputField _inputField;

	ForwardGeocodeResource _resource;

	Vector2d _coordinate;
	public Vector2d Coordinate
	{
		get
		{
			return _coordinate;
		}
	}

	bool _hasResponse;
	public bool HasResponse
	{
		get
		{
			return _hasResponse;
		}
	}

	public ForwardGeocodeResponse Response { get; private set; }

	public event Action<ForwardGeocodeResponse> OnGeocoderResponse = delegate { };

	void Awake()
	{
		_inputField = GetComponent<InputField>();
		_inputField.onEndEdit.AddListener(HandleUserInput);
		_resource = new ForwardGeocodeResource("");
	}

	void HandleUserInput(string searchString)
	{
		_hasResponse = false;
		if (!string.IsNullOrEmpty(searchString))
		{
			_resource.Query = searchString;
			MapboxAccess.Instance.Geocoder.Geocode(_resource, HandleGeocoderResponse);
		}
	}

	void HandleGeocoderResponse(ForwardGeocodeResponse res)
	{
		_hasResponse = true;
		if (null == res)
		{
			_inputField.text = "no geocode response";
		}
		else if (null != res.Features && res.Features.Count > 0)
		{
			var center = res.Features[0].Center;
			_coordinate = res.Features[0].Center;
		}
		Response = res;
		OnGeocoderResponse(res);
	}
}