using System;
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace Assets.Scripts.API
{
	public class Server : MonoBehaviour
	{
		public static string HOST_PROD = "https://quantifly.plnech.fr";
		public static string HOST_DEV = "http://localhost:8990";

	    public ScoresRes Scores;

		public Server ()
		{
		}

	    public void Start()
	    {
	        GetScores();
	    }

		public void GetScores()
		{
			StartCoroutine(GetScoresAsync());
		}

		IEnumerator GetScoresAsync() {
			UnityWebRequest www = UnityWebRequest.Get(HOST_PROD + "/scores/");
			yield return www.Send();

			if (www.isError) {
				Debug.LogError ("Error:" + www.error);
			} else {
				Debug.Log ("Got response: " + www.downloadHandler.text);
				Scores = ScoresRes.CreateFromJson (www.downloadHandler.text);
				Debug.Log ("Got scores: " + Scores);
			}
		}

		public static void PostScore(int score, String playerName, String playerTeam = null)
		{
			WWWForm form = new WWWForm();
			form.AddField("name", playerName);
			form.AddField("team", playerTeam);
			form.AddField("score", score);
			new WWW(HOST_PROD + "/score/", form);
		}

		[Serializable]
		public class ScoresRes {
			public string status;
			public Score[] scores;

			public ScoresRes() {}

		    public static ScoresRes CreateFromJson(string scoresJSON)
		    {
		        return JsonUtility.FromJson<ScoresRes>(scoresJSON);
		    }

		    public override string ToString()
		    {
		        var s = (from e in scores
		            where e != null
		            select e.ToString()).ToArray();
		        return "Status: " + status + "Scores:\n" + string.Join(",", s);
		    }
		}
	}
}

