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

namespace Assets.Scripts.API
{
	public class Server
	{
		public static string HOST = "http://localhost:8990";

		public Server ()
		{
		}

		public static List<Score> GetScores ()
		{
			UnityWebRequest www = UnityWebRequest.Get(HOST + "/scores/");
			www.Send();

			if (www.isError) {
				Debug.LogError("Error:" + www.error);
				return null;
			}
		    Debug.Log("Got response: " + www.downloadHandler.text);
		    ScoresRes res = JsonUtility.FromJson<ScoresRes>(www.downloadHandler.text);
		    //Debug.Log("Got scores: " + res.scores);

		    string status = "{\"status\":\"ok\"}";
		    string mockText = "{\"scores\":[{\"playerName\":\"John Smith\",\"team\":null,\"score\":10,\"date\":\"2016-10-23T12:42:54.810Z\",\"_id\":\"d21b623e9b394993be3224de89099194\"}," +
		                      "{\"playerName\":\"Randy\",\"team\":\"iGEM Headquarters\",\"score\":42,\"date\":\"2016-10-23T12:45:45.774Z\",\"_id\":\"a3a66de22b30450492f8f6b1bf178123\"}" +
		                      "]}";
		    ScoresRes mock = ScoresRes.CreateFromJson(status, mockText); //TODO: Why does JsonUtility fail to deserialize? /o\
		    Debug.Log("Mock scores: " + mock);
		    return res.scores;
		}

		[System.Serializable]
		public class ScoresRes {
			public string status { get; set;}
			public List<Score> scores { get; set;}
			public ScoresRes() {}

		    public static ScoresRes CreateFromJson(string status, string scores)
		    {
		        return new ScoresRes
		        {
		            status = status,
		            scores = JsonUtility.FromJson<List<Score>>(scores)
		        };
		    }

		    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);
		    }
		}
	}
}