//Fila_Espera.java
/**
 * Clase para generar una fila dopnde colocar los alumnos
 * @author Cristobal Garrido
 * @author Matias Hernandez
 * @author Ulises Leiva
 */
import java.awt.*;
import java.awt.geom.*;
import java.util.ArrayList;
import java.awt.event.*;
import javax.swing.*;

/**
Clase para crear la fila de espera.
Tiene implementado la interfaz View.
*/

public class Fila_Espera implements View
{
	/**
	 * Variable de posicion x en el panel.
	 */
	private int origen_x;
	/**
	 * Variable de posicion y en el panel.
	 */
	private int origen_y;
	/**
	 * Variable de diametro de los circulos que representan a los alumnos.
	 */
	private int diametro_alumnos;
	/**
	 * Variable entera que se utiliza para agregar en la posicion adecuada
	 * del arreglo de alumnos el numero entero correspondiente al tipo de almuerzo.
	 */
	private int l;
	/**
	 * Variables para crear los circulos que representan a los alumnos.
	 */
	private ArrayList<Ellipse2D> Alumnos_vista;
	/**
	 * Variable para crear un arreglo de enteros que representan el tipo de
	 * comida de cada alumno.
	 */
	private ArrayList<Integer> Alumnos;
	/**
	 * Variable para crear un arreglo de enteros de
	 * los valores que se agregaran.
	 */
	private ArrayList<Integer> valores_generados;
	/**
	 * Variable para referenciar al JPanel
	 */
	private JPanel panel;
	/**
	 * Variable para crear un fondo cuadrado para la fila de espera.
	 */
	private Rectangle2D fila;
	/**
	 * Variable de tiempo para verificar y/o agregar un valor
	 * a un arreglo de enteros.
	 */
	private Timer tg;
	/**
	 * Variable para definir el tipo de fuente de la letra.
	 */
	private Font my_font;

	/**
	 * Constructor Fila_Espera.  Inicializa la Fila de Espera.
	 * @param Ox 	Coordenada x en la interfaz
	 * @param Oy 	Coordenada y en la interfaz
	 * @param diametro 	diametro de circulos que se crean dentro
	 * de la fila de espera
	 * @param a Variable referencial a un arreglo de enteros
	 */

	public Fila_Espera(int Ox, int Oy, int diametro, ArrayList <Integer> a)
	{
		origen_x = Ox;
		origen_y = Oy;
		diametro_alumnos = diametro;
		Alumnos = a;
		fila = new Rectangle2D.Double(origen_x, origen_y, 10*diametro, diametro);
		Alumnos_vista = new ArrayList<Ellipse2D>();
		for (int i = 0; i < 10; i++)
		{
			Alumnos_vista.add(new Ellipse2D.Double(Ox + (diametro_alumnos*9) - (diametro_alumnos*i), Oy, diametro_alumnos, diametro_alumnos));
		}
		my_font = new Font ("Verdana", 1, 55);
	}

	/**
	 * Cambia los colores de los circulos en la
	 * interfaz grafica de Fila_Espera dependiendo
	 * del estado.
	 * @param g2d Variable referencial a Graphics2D
	 * para utilizar todos sus metodos.
	 */

	public void paint_view (Graphics2D g2d)
	{
		g2d.setColor(Color.RED);
		g2d.fill(fila);
		g2d.setFont(my_font);
		for (int i = 0; i < Alumnos.size(); i++)
		{
			if (Alumnos.get(i) == 0)
			{
				g2d.setColor(Color.GRAY);
				g2d.fill(Alumnos_vista.get(i));
				g2d.setColor(Color.WHITE);
				g2d.drawString("N", origen_x + (diametro_alumnos*9) - (diametro_alumnos*i) + (diametro_alumnos/4) - 2, origen_y + diametro_alumnos*3/4);
			}
			else if (Alumnos.get(i) == 1)
			{
				g2d.setColor(Color.GREEN);
				g2d.fill(Alumnos_vista.get(i));
				g2d.setColor(Color.WHITE);
				g2d.drawString("V", origen_x + (diametro_alumnos*9) - (diametro_alumnos*i) + diametro_alumnos/4, origen_y + diametro_alumnos*3/4);
			}
			else
			{
				g2d.setColor(Color.YELLOW);
				g2d.fill(Alumnos_vista.get(i));
				g2d.setColor(Color.WHITE);
				g2d.drawString("D", origen_x + (diametro_alumnos*9) - (diametro_alumnos*i) + diametro_alumnos/4, origen_y + diametro_alumnos*3/4);
			}
		}
	}

	 /**
	 * Enciende el panel.
	 * @param p Variable referencial al panel
	 */

	public void setPanel(JPanel p)
	{
		panel=p;
	}

	/**
	* Agrega valores al arreglo de enteros.
	* @param val Variable referencial a un arreglo de enteros
	*/

	public void addvalue(ArrayList <Integer> val)
	{
		l = 0;
		valores_generados = val;
		tg = new Timer(5, new ActionListener (){
			public void actionPerformed(ActionEvent event) {
				if (Alumnos.size()<10)
				{
					Alumnos.add(valores_generados.get(l));
					//System.out.print(l);
					//System.out.println(valores_generados.get(l));
					l++;
				}
				if (l == valores_generados.size())
				{
					tg.stop();
				}
			}
		});
		tg.start();
	}

	/**
	 * Vuelve a pintar la interfaz grafica.
	 */

	public void repaint()
	{
		panel.repaint();
	}



}
