using System;
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//Pretty much a copy of GetData...
namespace PedometerU.Tests {

public class GetGoals : MonoBehaviour {

	public Text goalText;
	public string currentDayStr = System.DateTime.Now.ToString("MM/dd/yyyy");
	public string goalDayStr = System.DateTime.Now.ToString("MM/dd/yyyy");
	public string prefKey;

	//Progress Bar...
	public float barDisplay; //current progress
	private Vector2 barPos;
	private Vector2 barSize = new Vector2(227,20);

	//Pedometer
	private Pedometer pedometer;
	int userSteps;
	int userPoints;
	double userDistance;
	int stepsGoal = 100;
	public Text stepText;
	public Text pointsText;
	private int savedSteps;
	private int savedPoints;

	void OnStep (int steps, double distance) {
		userDistance = (distance * 3.28084);
		userSteps = steps + savedSteps;
		PlayerPrefs.SetInt("currentSteps",userSteps);
			stepText.text = userSteps.ToString () + "/" + stepsGoal.ToString();

		userPoints = steps*5 + savedPoints;
		PlayerPrefs.SetInt("totalPoints",userPoints);
		pointsText.text = "Points: " + userPoints.ToString ();
	}

	private void OnDisable () {
		// Release the pedometer
		pedometer.Dispose();
		pedometer = null;
	}

	//saved value from last session loads in on START
	//write usersteps + saved val to pref in ONSTEP

	void Start () {
		savedSteps = PlayerPrefs.GetInt("currentSteps");
		savedPoints = PlayerPrefs.GetInt("totalPoints");
		// Create a new pedometer
		pedometer = new Pedometer(OnStep);
		// Reset UI
			stepText.text = savedSteps.ToString () + "/" + stepsGoal.ToString();
		if(PlayerPrefs.HasKey("totalPoints"))
		{
			pointsText.text = "Points: " + PlayerPrefs.GetInt("totalPoints").ToString ();
		}
		else
		{
			PlayerPrefs.SetInt("totalPoints", 0);
			pointsText.text = "Points: " + PlayerPrefs.GetInt("totalPoints").ToString ();
		}
		userSteps = savedSteps;
		userPoints = savedPoints;

		//OnStep(savedSteps, 0);
		Debug.Log(savedSteps);


		//goalText.text = prefKey;
		goalText.color = new Color(0f, 0f, 0f);
			Debug.Log(goalText.transform.position.x.ToString() + " " + goalText.transform.position.y.ToString());
		barPos = new Vector2(goalText.transform.position.x, goalText.transform.position.y);

		currentDayStr = System.DateTime.Now.ToString("MM/dd/yyyy");
		goalDayStr = System.DateTime.Now.ToString("MM/dd/yyyy");
		Debug.Log(goalDayStr);

		if(prefKey == "daily")
			savePersistantGoalDate("daily");
	}


	//Texture the progress bar using these parameters
	public Texture2D emptyTex;
	public Texture2D fullTex;

	//on a button press? begin a goal?
	void startGoal()
	{
	}

	void savePersistantGoalDate(string key)
	{
		PlayerPrefs.SetString(key, goalDayStr);
	}

	bool checkNewDay(string key)
	{
		string checkDay = PlayerPrefs.GetString(key);
		if(checkDay == currentDayStr)
			return false;
		return true;
	}

	void OnGUI() {
		//draw the background:
		GUI.BeginGroup(new Rect(barPos.x, barPos.y, barSize.x, barSize.y));
		GUI.Box(new Rect(0,0, barSize.x, barSize.y), emptyTex);

			//draw the filled-in part:
			GUI.BeginGroup(new Rect(0,0, barSize.x * barDisplay, barSize.y));
			GUI.Box(new Rect(0,0, barSize.x, barSize.y), fullTex);
			GUI.EndGroup();
		GUI.EndGroup();
	}

	void Update() {
		//needs current points counting toward this goal (daily?)
		//needs the total required points for this goal
		currentDayStr = System.DateTime.Now.ToString("MM/dd/yyyy");
		//barDisplay = Time.time*0.05f; //put actual progress here (current/total)
		barDisplay = (float)userSteps/(float)stepsGoal;

		//failed to complete goal
		if(currentDayStr != goalDayStr)
		{
			Debug.Log(currentDayStr);
			Debug.Log(goalDayStr);

			Debug.Log("DAY HAS PASSED!!");

			//make it so user dismisses the goal instead!
			//Destroy(this);
			//destroy the goal and set a new one?

		}
		//goal complete
		if(barDisplay >= 1.0f)
		{
			Debug.Log("Goal complete! +100pts!");
			userSteps = 0;
			PlayerPrefs.SetInt("currentSteps", userSteps);
			savedSteps = 0;
			//OnStep(0,0);
			stepText.text = userSteps.ToString () + "/" + stepsGoal.ToString();

			//destroy the goal and set a new one?
			savedPoints += stepsGoal*10;
			PlayerPrefs.SetInt("totalPoints", savedPoints);
			pointsText.text = "Points: " + PlayerPrefs.GetInt("totalPoints").ToString ();
		}

		//only applies if "daily" goal
		if(prefKey == "daily")
		{
			if(checkNewDay(prefKey))
			{
				Debug.Log("You failed your goal"); //not true if progress is actually complete!
				goalDayStr = currentDayStr;
				savePersistantGoalDate("daily");
			}
		}
	}
}

}
