package VistaControlador;

import java.awt.Dimension;
import java.time.LocalDate;
import java.util.LinkedList;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import Logica.*;

public class VistaAniadirVisualizar extends JPanel{
	private int x,y;
	private static final int altoCheck=28;
	protected Gestion gestiones;
	protected JButton boton;
	protected LinkedList<JCheckBox> transacciones;
	JPanel cuadro;
	JScrollPane panel;
	Menu menu;
	//private ControladorAniadirVisualizar controlador;
	//private static VistaPanelGestion panelLateral;
	
	/**
	 * Constructor de la ventana que contendra las pestanias
	 * 
	 * @param menu		menu donde se guardaran
	 * @param gestion	gestion de la pestania
	 */
	public VistaAniadirVisualizar(Menu menu, Gestion gestion) {
		this.gestiones = gestion;
		this.transacciones = new LinkedList<JCheckBox>();
		this.menu = menu;
		this.x = 100;
		this.boton = new JButton("aniadir");
		this.add(boton);
		this.cuadro = new JPanel();
		this.panel = new JScrollPane(cuadro);
		this.panel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		this.panel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		cuadro.setPreferredSize(new Dimension(x, y));
		panel.setPreferredSize(new Dimension(100,200));
		panel.setVisible(true);
		this.add(panel);
	}
	
	/**
	 * Establece cual es el panel lateral
	 * 
	 * @param panel	panel lateral que gestionara este panel
	 */
	/*public static void setPanelLateral(VistaPanelGestion panel) {
		VistaAniadirVisualizar.panelLateral = panel;
	}*/
	
	public String getName() {
		return this.gestiones.getNombre();
	}
	
	/**
	 * Inicia la gestion
	 */
	void iniciarGestion(ControladorAniadirVisualizar controlador) {
		for(Transaccion transaccion:this.gestiones.getElementos()) {
			 this.aniadirElemento(transaccion, controlador);
		}
	}
	
	/**
	 * Aniade una nueva transaccion introduciendo sus datos
	 * 
	 * @param nombre		nombre de la transaccion
	 * @param dinero		dinero de la transaccion
	 * @param controlador	controlador de la casilla que de aniadira
	 */
	public void aniadirElemento(String nombre, float dinero, ControladorAniadirVisualizar controlador) {
		Transaccion transaccion = new Transaccion(nombre, dinero,this.menu.elegirMes.getDate(),this.gestiones);
		this.gestiones.aniadirGasto(transaccion);
		JCheckBox check = new JCheckBox(transaccion.toString());
		check.setSelected(true);
		check.setSize(new Dimension(x,VistaAniadirVisualizar.altoCheck));
		check.addActionListener(controlador);
		check.setActionCommand("pulsar");
		this.transacciones.add(check);
		this.cuadro.add(check);
		this.y += VistaAniadirVisualizar.altoCheck;
		cuadro.setPreferredSize(new Dimension(x, y));
		this.revalidate();
		this.repaint();
	}
	
	/**
	 * Elimina las casillas deseleccionadas
	 */
	void eliminarDeseleccionados(){
		for(JCheckBox check:this.transacciones) {
			if(!check.isSelected()) {
				this.cuadro.remove(check);
				this.gestiones.eliminarTransaccion(check.getText());
				this.menu.panelGestion.actualizarDatos(this.gestiones);
				this.cuadro.revalidate();
				this.cuadro.repaint();
			}
		}
	}
	
	void editarTransaccion(String nombreViejo, String nombreNuevo){
		for(Transaccion transaccion:this.gestiones.getElementos()) {
			if(transaccion.getNombre().equals(nombreViejo)) {
				for(JCheckBox check:this.transacciones) {
					if(check.getText().equals(transaccion.toString())) {
						transaccion.setName(nombreNuevo);
						check.setText(transaccion.toString());
						check.revalidate();
						check.repaint();
						//this.gestiones.editarTransaccion(nombreViejo, nombreNuevo);
						this.menu.panelGestion.actualizarDatos(this.gestiones);
						this.cuadro.revalidate();
						this.cuadro.repaint();
					}
				}
			}
		}
	}
	
	void editarTransaccionDinero(String nombreViejo, float dinero){
		for(Transaccion transaccion:this.gestiones.getElementos()) {
			if(transaccion.getNombre().equals(nombreViejo)) {
				for(JCheckBox check:this.transacciones) {
					if(check.getText().equals(transaccion.toString())) {
						transaccion.setPrecio(dinero);
						check.setText(transaccion.toString());
						check.revalidate();
						check.repaint();
						//this.gestiones.editarTransaccion(nombreViejo, nombreNuevo);
						this.menu.panelGestion.actualizarDatos(this.gestiones);
						this.cuadro.revalidate();
						this.cuadro.repaint();
					}
				}
			}
		}
	}
	
	void editarTransaccionFecha(String nombreViejo, LocalDate fecha){
		for(Transaccion transaccion:this.gestiones.getElementos()) {
			if(transaccion.getNombre().equals(nombreViejo)) {
				for(JCheckBox check:this.transacciones) {
					if(check.getText().equals(transaccion.toString())) {
						transaccion.setFecha(fecha);
						check.setText(transaccion.toString());
						check.revalidate();
						check.repaint();
						//this.gestiones.editarTransaccion(nombreViejo, nombreNuevo);
						this.menu.panelGestion.actualizarDatos(this.gestiones);
						this.cuadro.revalidate();
						this.cuadro.repaint();
					}
				}
			}
		}
	}
	
	/**
	 * aniade una nueva transaccion
	 */
	private void aniadirElemento(Transaccion transaccion, ControladorAniadirVisualizar controlador) {
		JCheckBox check = new JCheckBox(transaccion.toString());
		check.setSelected(true);
		check.setSize(new Dimension(x,VistaAniadirVisualizar.altoCheck));
		check.addActionListener(controlador);
		check.setActionCommand("pulsar");
		this.transacciones.add(check);
		this.cuadro.add(check);
		this.y += VistaAniadirVisualizar.altoCheck;
		cuadro.setPreferredSize(new Dimension(x, y));
		this.revalidate();
		this.repaint();
	}
}
