import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;

public class Controlador {
	public Controlador(Fila fila1, Fila fila2, Fila fila3, Fila fila4, ArrayList<Integer> alumnos, Alumnos_transicion A_tran, JPanel C_Panel, Generador_Masivo gen, Generador_Masivo gen2)
	{
		f1 = fila1;
		f2 = fila2;
		f3 = fila3;
		f4 = fila4;
		al = alumnos;
		p = C_Panel;
		A_t = A_tran;
		generador = gen;
		generador2 = gen2;
		t=1;
		anterior = false;
		mostrar = false;
		Timer temporizador = new Timer(100, new ActionListener(){
			public void actionPerformed (ActionEvent e){
				if (generador.isOn() | generador2.isOn() )
				{
					t = t+100;
				}
			}
		});
		
		Timer iniciador = new Timer(50, new ActionListener(){
			public void actionPerformed (ActionEvent e){
				if (al.size()==0 & t>1 & mostrar)
				{	
					System.out.print("Se demoró ");
					System.out.print(t-1);
					System.out.println(" ms");
					temporizador.stop();
					generador.setOff();
					generador2.setOff();
					mostrar = false;
				}
				else if (((generador.isOn() &(anterior==false))|(generador2.isOn() &(anterior2==false)))&t>0)
				{
					
					t = 0;
					mostrar = true;
					temporizador.start();
					
				}
				anterior = generador.isOn();
				anterior2 = generador2.isOn();
			}
		});
		iniciador.start();
		tick = new Timer(100, new ActionListener (){
			public void actionPerformed(ActionEvent event)
			{
				
				p.repaint();
					if(al.size()>0)
					{
						// System.out.println("entra5");
						int next = al.get(0);
						switch(next) {
						case 0:
							if(f1.isfree1())
							{
								A_t.Gotofila11(next);
								//try{Thread.sleep(10000000);}catch(InterruptedException e){System.out.println(e);}
								al.remove(0);
							}
							else if (f1.isfree2())
							{
								A_t.Gotofila12(next);
								al.remove(0);
							}
							else if (f2.isfree1())
							{
								A_t.Gotofila21(next);
								al.remove(0);
							}
							else if (f2.isfree2()) {
								A_t.Gotofila22(next);
								al.remove(0);
							}
							else if (f3.isfree1()) {
								A_t.Gotofila31(next);
								al.remove(0);
							}
							else if (f3.isfree2()) {
								A_t.Gotofila32(next);
								al.remove(0);
							}
							else if (f4.isfree1()) {
								A_t.Gotofila41(next);
								al.remove(0);
							}
							else if (f4.isfree2()) {
								A_t.Gotofila42(next);
								al.remove(0);
							}
							break;
						case 1:
							if(f1.isfree1()) {
								A_t.Gotofila11(next);
								al.remove(0);
							}
							else if (f1.isfree2()) {
								A_t.Gotofila12(next);
								al.remove(0);
							}
							else if (f2.isfree1()) {
								A_t.Gotofila21(next);
								al.remove(0);
							}
							else if (f2.isfree2()) {
								A_t.Gotofila22(next);
								al.remove(0);
							}
							break;
						case 2:
							if(!filasdieta) {
								if (f3.isfree1()) {
									A_t.Gotofila31(next);
									al.remove(0);
								}
								else if (f3.isfree2()) {
									A_t.Gotofila32(next);
									al.remove(0);
								}
								break;}
							else {
								if (f3.isfree1()) {
									A_t.Gotofila31(next);
									al.remove(0);
								}
								else if (f3.isfree2()) {
									A_t.Gotofila32(next);
									al.remove(0);
								}
								else if (f4.isfree1()) {
									A_t.Gotofila41(next);
									al.remove(0);
								}
								else if (f4.isfree2()) {
									A_t.Gotofila42(next);
									al.remove(0);
								}
								break;
								
							}
						case 3:
							break;
						}
					}
				// }
			}
		});
	}



	public void manageCasino()
	{
		tick.start();
    }
	public void CambiarDieta(boolean opcion) {
		if(opcion) {filasdieta = true;}
		else {filasdieta = false;}
	}


	private JPanel p;
	private Timer tick;
	private Fila f1;
	private Fila f2;
	private Fila f3;
	private Fila f4;
	private boolean mostrar;
	private int t;
	private boolean anterior;
	private boolean anterior2;
	private Generador_Masivo generador;
	private Generador_Masivo generador2;
	private ArrayList<Integer> al;
	private boolean filasdieta;
	private Alumnos_transicion A_t;
}


