using UnityEngine;
using System.Collections;
using System;


/* Azul pega auxStack.Peek();
   Vermelho pega myStack.Peek(); */

public class Pilha : MonoBehaviour {


    public GameObject [] blocos_para_pilha;
    public GameObject fundo;
    public Stack myStack = new Stack();
    public Stack auxStack = new Stack();
    //public Stack popula = new Stack();
    public Stack pilha_guarda_myStack = new Stack();
    public TempoRestante tempoAcabou;
    Vector2 destino_pilha = new Vector2(403, -289);
    Vector2 destino_proximo_aux = new Vector2(-341,239);
    Vector2 destino_proximo_mystack= new Vector2(60, 239);
    Vector2 destino_fundo = new Vector2(389, -71);



    public void Gerar_pilha_aleatoria()
    {
        GameObject novo_bloco;
        myStack.Push(blocos_para_pilha[UnityEngine.Random.Range(0, 9)]);
        for (int i = 0; i < 19; i++)
        {  
            novo_bloco = (blocos_para_pilha[UnityEngine.Random.Range(0, 9)]);
            while(novo_bloco == myStack.Peek())
            {
                novo_bloco = (blocos_para_pilha[UnityEngine.Random.Range(0, 9)]);
            }
            myStack.Push(novo_bloco);
        }
    }

    public void Gerar_pilha_auxiliar()
    {

        for (int i = 0; i < 10; i++)
        {
            if (myStack.Count == 0)
            {
                break;
            }
            auxStack.Push(myStack.Pop());

        }
    }

  
    

    // Use this for initialization
    void Start() {
     
    }

    public void Plota_myStack_Vazia()
    {
        Stack segura_myStack = new Stack();
        int f = myStack.Count;
        int i = 0;
        for (i=0; i<f; i++)
        {
            segura_myStack.Push(myStack.Pop());
        }
        Debug.Log(segura_myStack.Count);
        Debug.Log(myStack.Count);
        for (i=0; i<f; i++)
        {
            myStack.Push(segura_myStack.Pop());
        }

    }

    public void Plota_mystack()
    {

        destino_pilha.y = -289;
        
        int k = myStack.Count;
        this.Plota_myStack_Vazia();
       

        for (int i = 0; i < k; i++)
        {
            pilha_guarda_myStack.Push(myStack.Pop());
        }
        
        for (int i = 0; i < k; i++)
        {
            if (pilha_guarda_myStack.Count == 0)
            {
                break;
            }
            Instantiate((GameObject)pilha_guarda_myStack.Peek(), destino_pilha, transform.rotation);
            myStack.Push(pilha_guarda_myStack.Pop());
            destino_pilha.y = destino_pilha.y + 20;
        }
        Instantiate(fundo, destino_fundo, transform.rotation);
        Instantiate((GameObject)Peek_auxiliar(), destino_proximo_aux, transform.rotation);
        Instantiate((GameObject)Peek_mystakc(), destino_proximo_mystack, transform.rotation);


    }

    public object Peek_auxiliar()
    {
        return auxStack.Peek();            
    }

    public void Pop_mystack()
    {
        auxStack.Push(myStack.Pop());
    }

    public object Peek_mystakc()
    {
            return myStack.Peek();
    }

    public void Push_mystack()
    {
        myStack.Push(auxStack.Pop());

    }

    public bool Vazia(Stack stack1)
    {
        if (stack1.Count == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

   public bool Cheia(Stack stack1)
    {
        if (stack1.Count == 20)
        {
            return true;
        }
        else
        {
            return false;
        }
    }



    // Update is called once per frame
    void Update() {

        if (tempoAcabou.tempo_restante == 0 && myStack.Count > 10)
        {
            Debug.Log("Azul Ganhou");
            Application.LoadLevel("Azul Venceu");
        }
        else if (tempoAcabou.tempo_restante == 0 && myStack.Count < 10)
        {
            Debug.Log("Vermelho Ganho");
            Application.LoadLevel("Vermelho Venceu");
        }
        else if (myStack.Count == 20)
        {
            Debug.Log("Azul Ganhou");
            Application.LoadLevel("Azul Venceu");
        }
        else if (myStack.Count == 0)
        {
            Debug.Log("Vermelho Ganho");
            Application.LoadLevel("Vermelho Venceu");
        }
        else if(tempoAcabou.tempo_restante == 0 && myStack.Count == 10)
        {
            Debug.Log("Empate");
            Application.LoadLevel("Empate");
        }
            

    }


}

