using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

namespace UnityStandardAssets._2D
{
	public class SelectorPersonajes : MonoBehaviour {
		PlatformerCharacter2D[] personajes;
		private int ABUELO = 0;
		private int BABOSA = 1;
		private int OSO = 3;
		private int GALLINA = 2;
		public int tipoActual = 0;
		public int tipoMemoria = 0;
		private Animator m_Anim;
		private Rigidbody2D m_Rigidbody2D;
		private SpriteRenderer sprite;
		private Feedback[] feedback;
		private int feedbackActual;
		private float conteoTransformacionMemoria = 1.2f;
		private float conteoTransformacion = 1.2f;
		public AudioClip[] clips;
		private AudioSource aS;
		public float evolucion = 0;
		public float malKarma = 0;

		public bool colliderMovido= false;

		private int indicePersonajeActual = 0;

		public int vida = 5;
		public VIda vidaUI;

		bool subirVolumen = false;
		bool bajarVolumen = false;
		bool cambiarCancion = false;
		int NUEVA_CANCION = 0;
		// Use this for initialization
		void Start () {
			aS = GetComponent<AudioSource> ();
			personajes = GetComponentsInChildren<PlatformerCharacter2D> ();
			m_Anim = GetComponent<Animator>();
			sprite = GetComponent<SpriteRenderer> ();
			m_Rigidbody2D = GetComponent<Rigidbody2D> ();
			vidaUI = GameObject.FindGameObjectWithTag("UIVida").GetComponent<VIda> ();
			vidaUI.inicializar ();
			//feedback = GetComponent<Feedback> ();
			feedback = GameObject.FindGameObjectWithTag ("ui").GetComponentsInChildren<Feedback> ();

			for (int i = 0; i < 4; i++) {
				feedback[i].inicializar ();
			}
			m_Anim.enabled = false;
			sprite.enabled = false;
			//feedbackActual = tipoActual;
			for (int i = 0; i < 4; i++) {
				personajes [i].seleccionar(tipoActual);
				feedback[i].seleccionar(tipoActual);
				if (feedback [i].enable) {
					feedbackActual = i;
					Debug.Log (i);
				}
				/*if (personajes [i].enable) {
					feedbackActual = i;
					feedback [feedbackActual].gameObject.SetActive (true);
				} else {
					feedback [i].gameObject.SetActive (false);
				}*/
			}
			inicializarAudio ();
		}
		
		// Update is called once per frame
		void Update () {
			audio ();
			if (tipoActual != tipoMemoria) {
				m_Anim.enabled = true;
				sprite.enabled = true;
				for (int i = 0; i < 4; i++) {
					if (personajes [i].enable) {
						personajes [i].parar();
					}
					personajes [i].seleccionar (5);
				}
			}
			if (m_Anim.enabled) {
				conteoTransformacion -= Time.deltaTime;
				if (conteoTransformacion <= 0) {
					for (int i = 0; i < 4; i++) {
						personajes [i].seleccionar (tipoActual);
						if (personajes [i].enable) {
							indicePersonajeActual = i;
						}
						Debug.Log (tipoActual);
						feedback [i].seleccionar(tipoActual);
						if (feedback [i].enable) {
							feedbackActual = i;
						}

					}
					//feedbackActual = tipoActual;
					//feedback [tipoActual].gameObject.SetActive (false);
					tipoMemoria = tipoActual;
					conteoTransformacion = conteoTransformacionMemoria;
					m_Anim.enabled = false;
					sprite.enabled = false;
				}
			}

			if (tipoActual == BABOSA) {
				if (evolucion >= 2) {
					tipoActual = GALLINA;
					setCancion (GALLINA);
					evolucion = 0;
				}
			} else if (tipoActual == GALLINA) {
				if (evolucion >= 3) {
					tipoActual = OSO;
					setCancion (OSO);
					evolucion = 0;
				}
			}  else if (tipoActual == OSO) {
				if (evolucion >= 4) {
					tipoActual = ABUELO;
					setCancion (ABUELO);
					evolucion = 0;
				}
			}

			if (vida <= 0) {
				SceneManager.LoadScene(1);
			}
		}

		public void setSimbolo(int cual){			
			feedback[feedbackActual].setSimbolo (cual);
			evolucion++;
			Debug.Log (feedbackActual+"  "+cual+"  "+evolucion);
		}

		public void empujon(Vector3 desde){
			personajes [indicePersonajeActual].empujon (desde);
			vida--;
			vidaUI.bajarVida ();
		}

		void inicializarAudio(){
			aS.clip = clips[BABOSA];
			aS.volume = 0f;
			subirVolumen = true;
			aS.Play ();
		}



		bool fadeIn(){	
			bool v = false;
			aS.volume += 0.02f;
			if (aS.volume >= 1) {
				v = true;
			}
			return v;
		}

		bool fadeOut(){	
			bool v = false;
			aS.volume -= 0.02f;
			if (aS.volume <= 0) {
				v = true;
			}
			return v;
		}
		void audio(){
			if (cambiarCancion) {
				bajarVolumen = true;
			}
			if (subirVolumen) {
				subirVolumen = !fadeIn ();
			}

			if (bajarVolumen) {
				bajarVolumen = !fadeOut ();
				if (!bajarVolumen) {
					cambiarCancion = false;
					aS.clip = clips[NUEVA_CANCION];
					aS.volume = 0f;
					aS.Play ();
					subirVolumen = true;
				}
			}
		}

		void setCancion(int cual){
			cambiarCancion = true;
			NUEVA_CANCION = cual;
		}
	}
}
