/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 


package servidor.configurador;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.BorderFactory;
import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;


import servidor.datos.BaseDatos;
import servidor.datos.TablaZonasAtencion;
import servidor.datos.Tabla_Base;


import servidor.datos.TablaPuestos;
import servidor.utiles.smoothJLabel;

public class frmPuestos extends MouseAdapter implements ActionListener {
	//ArrayList Puestos = null;
	String colas = null;
	JPanel jPanelPuestos = null;
	ItemGridPuesto[] itemPuestos;
	HashMap zonas = null;

	JTable gridPuestos;
	String[] cabeceras = {"Puesto", "Capacidades","Zona Atencion", "Exclusiva"};
	public frmPuestos() {
		super();
		initComponents();
		carga_datos();

		gridPuestos.setEnabled(false);
		gridPuestos.addMouseListener(this);

	}
	public void carga_datos(){ 
		cargaZonas();
		actualizaPuestos();
	
	}
	void cargaZonas() {
		zonas = new HashMap(30);
		try {
			TablaZonasAtencion top = BaseDatos.bd().tablaZonasAtencion();
			top.leerDatos(null);
			top.beforeFirst();
            zonas.put(new Integer(-1), "");
			while (top.next()) {
				Integer idsala = new Integer(top.getId());
				String descripcion = new String(top.getDescripcion());
				// Object[] a={codcate,descripcion};
				zonas.put(idsala, descripcion);
			}
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "No se pudo cargar las zonas de atencion.\n" + e.getMessage());
			e.printStackTrace();
			System.exit(1);
		}
	}

	private void actualizaPuestos() {
		this.cargaPanelPorPuestos();
		gridPuestos.setModel(new GridTableModel(itemPuestos, cabeceras));
		gridPuestos.getColumnModel().getColumn(0).setMaxWidth(60);
		gridPuestos.getColumnModel().getColumn(3).setMaxWidth(60);
	}

	public void mousePressed(java.awt.event.MouseEvent evt) {
		if (((JTable) evt.getSource()).getName() == "gridPuestos") {
			seleccionarFilaGrid(gridPuestos, evt.getPoint());
			if (evt.getClickCount() == 2) {
				int filagrid=gridPuestos.getSelectedRow();
				String letraPuesto = (String) gridPuestos.getValueAt(filagrid, 0);
				String colas = (String) gridPuestos.getValueAt(filagrid, 1);
				String zona=(String) gridPuestos.getValueAt(filagrid, 2);
				boolean exclusiva = ((Boolean) gridPuestos.getValueAt(filagrid, 3)).booleanValue();
				frmMantenPuesto fO = new frmMantenPuesto(true,zonas);
				fO.Modifica(letraPuesto, colas,zona, exclusiva);

				if (!fO.getPuesto().equalsIgnoreCase("")) {

					Tabla_Base tcol = BaseDatos.bd().tablabase("Puestos");
						try {
							tcol.SQL("UPDATE Puestos SET puesto='" + fO.getPuesto() + "', " + "exclusivo=" + fO.getExclusiva() + ",capacidades='"
									+ fO.getCadena_capacidades() + "', IdSalaAtencion="+fO.getIdZona() + " WHERE Puesto='" + letraPuesto + "'");
							actualizaPuestos();
						} catch (SQLException e) {
							JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n Es posible que el puesto ya exista.");
							e.printStackTrace();

						}
					}

				}

			}
		}
	

	public JPanel contenido() {
		return jPanelPuestos;
	}

	void seleccionarFilaGrid(JTable grid, java.awt.Point p) {
		int r = grid.rowAtPoint(p);
		if (r != -1) {
			gridPuestos.changeSelection(r, 0, false, false);
		}
	}

	void cargaPanelPorPuestos() {
		TablaPuestos top = BaseDatos.bd().tablaPuestos();
		top.cargarTabla();
		ArrayList aPuestos=new ArrayList(top.size());
		Iterator it = top.listaiter();
		Integer mesa = null;

		while (it.hasNext()) {
			mesa =new Integer( ((String) it.next()));
			aPuestos.add(mesa);
		}
		 
		  Collections.sort(aPuestos); 
		  itemPuestos = new  ItemGridPuesto[aPuestos.size()]; 
		  String strmesa;
		  for (int i = 0; i < aPuestos.size();  i++) { 
			  strmesa=((Integer)aPuestos.get(i)).toString() ;
			  String strzona = new String((String) zonas.get(top.zona(strmesa)));
			  itemPuestos[i] = new ItemGridPuesto(strmesa , (String) top.capacidades(strmesa ),strzona, top.esExclusivo(strmesa)); 
			  }
	}



	private void initComponents() {
		jPanelPuestos = new JPanel();
		jPanelPuestos.setLayout(new BorderLayout());
		jPanel2 = new javax.swing.JPanel();
		jPanel1 = new javax.swing.JPanel();
		jPanel3 = new javax.swing.JPanel();

		jScrollPane1 = new javax.swing.JScrollPane();
		gridPuestos = new javax.swing.JTable();
		gridPuestos.setName("gridPuestos");
		gridPuestos.getTableHeader().setReorderingAllowed(false);
		jPanel1.setLayout(new java.awt.BorderLayout());

		smoothJLabel titulito=new smoothJLabel("ATENEO - Puestos");
		titulito.setFont(new Font("Arial",Font.BOLD ,20));

			//	jPanel3.setPreferredSize(new java.awt.Dimension(490, 35));
		jPanel3.add(titulito);
				jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);

		jScrollPane1.setViewportView(gridPuestos);
		JButton jbNuevo = new JButton("Nuevo");
		jbNuevo.addActionListener(this);
		jPanel2.add(jbNuevo);
		JButton jbBorrar = new JButton("Borrar");
		jbBorrar.addActionListener(this);
		jPanel2.add(jbBorrar);
		jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
		jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);
		jPanel1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
		jPanelPuestos.add(jPanel1, java.awt.BorderLayout.CENTER);

	}
	public void actionPerformed(ActionEvent e) {
		JButton jb = (JButton) e.getSource();
		if (jb.getActionCommand().equalsIgnoreCase("nuevo")) {
				frmMantenPuesto fO = new frmMantenPuesto(true,zonas);
				fO.Alta();
				String letraPuesto = fO.getPuesto();
				String colas = fO.getCadena_capacidades();
				if (!letraPuesto.equalsIgnoreCase("")) {
					TablaPuestos tpues = BaseDatos.bd().tablaPuestos();
			   	    tpues.cargarTabla();
					if (tpues.hayDatos(letraPuesto)) {
						JOptionPane.showMessageDialog(null, "Numero  de Puesto ya  utilizado.", "Configuracion Puestos", JOptionPane.ERROR_MESSAGE);
				   } else {
						try {
							tpues.SQL("INSERT INTO	Puestos (puesto,capacidades,exclusivo,IdSalaAtencion) VALUES ('" + letraPuesto + "','" + colas + "',"
									+ fO.getExclusiva() + ","+fO.getIdZona()+")");
							//tpues.SQL("EXECUTE crearPuesto '"+letraPuesto+"','"+colas+"',"+fO.getExclusiva() );
							actualizaPuestos();
						} catch (SQLException ex) {
							JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n"+ex.getMessage());
							ex.printStackTrace();
							System.exit(1);
						}

					}
			}
		}
		else if (jb.getActionCommand().equalsIgnoreCase("borrar")  && (gridPuestos.getSelectedRow()>-1)) {
			String letraPuesto = (String) gridPuestos.getValueAt(gridPuestos.getSelectedRow(), 0);
			if (JOptionPane.showConfirmDialog(	null,	"¿Seguro deseas borrar el puesto: " +letraPuesto + "?",
					"Confirmacion puestos",	JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
				TablaPuestos tpues = BaseDatos.bd().tablaPuestos();
				try {
					tpues.SQL("DELETE FROM Puestos WHERE puesto='" + letraPuesto + "'");
					actualizaPuestos();
				} catch (SQLException ex) {
					JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n"+ex.getMessage());
					ex.printStackTrace();
					System.exit(1);
				}
		}
		}

	}

	private javax.swing.JPanel jPanel1, jPanel2, jPanel3;
	private javax.swing.JScrollPane jScrollPane1;

	class ItemGridPuesto extends ItemGrid {
	
		ItemGridPuesto(String puesto, String capacidades,String Zona ,boolean exclusivo) {
			valores = new Object[4];
			valores[0] = new String(puesto);
			valores[1] = new String(capacidades);
			valores[2]=new String(Zona);
			valores[3] = new Boolean(exclusivo);
		}

	}

	
	public static void main(String[] argv) {
		frmPuestos fp = new frmPuestos();
		JFrame jf = new JFrame("gg");
		jf.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		jf.setContentPane(fp.contenido());
		jf.pack();
		jf.setVisible(true);

	}
}
