/* 
* 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.Component;
import java.awt.Dimension;
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.HashMap;



import javax.swing.BorderFactory;

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

import javax.swing.table.DefaultTableCellRenderer;

import servidor.datos.BaseDatos;
import servidor.datos.TablaServicios;
import servidor.datos.Tabla_Base;
import servidor.utiles.smoothJLabel;

public class frmColas extends MouseAdapter implements ActionListener
 {
	ArrayList colas = null;
	HashMap categorias = null;
	HashMap salas = null;
	JPanel jPanelColas = null;
	ItemGridCola[] itemColas;

	JTable gridColas;
	String[] cabeceras = {"Letra", "Descripcion", "Categoria Estadistica", "Sala Espera","Act","Bon","NIFO","Esp","Umbral","GesH","OpeHuecos"};
	public frmColas() {
		super();
		initComponents();
		carga_datos();
		gridColas.setEnabled(false);
		gridColas.addMouseListener(this);
		//gridColas.getColumnModel().getColumn(5).setCellRenderer(new celdarender());
	}
	public void carga_datos(){ 
		cargaCategorias();
		cargaSalasEspera();
		actualizaColas();
	
	}
	private void actualizaColas() {
		this.cargaPanelPorColas();
		gridColas.setModel(new GridTableModel(itemColas, cabeceras));
		gridColas.getColumnModel().getColumn(0).setMaxWidth(30);
		gridColas.getColumnModel().getColumn(4).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(5).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(6).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(7).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(8).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(9).setMaxWidth(40);
		gridColas.getColumnModel().getColumn(10).setMaxWidth(40);
	//	gridColas.getColumnModel().getColumn(11).setMaxWidth(40);
        //      gridColas.getColumnModel().getColumn(12).setMaxWidth(30);
	//	gridColas.getColumnModel().getColumn(5).setCellRenderer(new celdarender());
	}

	public void mousePressed(java.awt.event.MouseEvent evt) {
		if (((JTable) evt.getSource()).getName() == "gridColas") {
			seleccionarFilaGrid(gridColas, evt.getPoint());
			if (evt.getClickCount() == 2) {
				int filagrid=gridColas.getSelectedRow();
				String letracola = (String) gridColas.getValueAt(filagrid, 0);
				String descripcionCola = (String) gridColas.getValueAt(filagrid, 1);
				Boolean activaCola = (Boolean) gridColas.getValueAt(filagrid, 4);
				Boolean GesHue = (Boolean) gridColas.getValueAt(filagrid, 9);
                                Boolean OpeHue = (Boolean) gridColas.getValueAt(filagrid, 10);
				String categor=(String) gridColas.getValueAt(filagrid, 2);
				String sala=(String) gridColas.getValueAt(filagrid, 3);
			//	boolean conserviciosCP=((Boolean) gridColas.getValueAt(filagrid,5)).booleanValue();
			//	String codnave = (String) gridColas.getValueAt(filagrid,6);
				String boni = (String) gridColas.getValueAt(filagrid,5);
				Boolean NifObligatorio = (Boolean) gridColas.getValueAt(filagrid,6);
				Boolean ColaEspecial = (Boolean) gridColas.getValueAt(filagrid,7);
				String UmbralSuplencia = (String) gridColas.getValueAt(filagrid,8);
				
				frmMantenCola fO = new frmMantenCola(true, categorias,salas);
				
				
				fO.Modifica(letracola, descripcionCola ,activaCola,categor,sala ,  boni,NifObligatorio,ColaEspecial,UmbralSuplencia, GesHue,OpeHue);
				
				String citaprevia=fO.getGesHue();
				if (!fO.getCola().equalsIgnoreCase("")) {
					Tabla_Base tcol = BaseDatos.bd().tablabase ("Colas");
					try {
						String st=("UPDATE colas SET descripcion='" + fO.getDescripcion() + "', " + "activa=" + fO.getActivo()
								+ ",codigoestadistico='" + fO.getCodCate() +  "',IdSalaEspera="+fO.getIdSala()+",bonificacion='"+
								fO.getBonificacion() +"',citaprevia="+citaprevia+",TiempoMedio=0,NifObligatorio="+fO.getNifObligatorio()+",UmbralSuplencia="+fO.getUmbralSuplencia()+",ColaEspecial="+fO.getColaEspecial()+",HuecosOpe="+ fO.getOpeHue()+"   WHERE cola='" + fO.getCola() + "'");
						tcol.SQL(st);
						actualizaColas();
					} catch (SQLException e) {
						JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n" + e.getMessage());
						e.printStackTrace();
						System.exit(1);
					}

				}
			}
		}
	}

	
	
	public JPanel contenido() {
		return jPanelColas;
	}

	void seleccionarFilaGrid(JTable grid, java.awt.Point p) {
		int r = grid.rowAtPoint(p);
		if (r != -1) {
			gridColas.changeSelection(r, 0, false, false);
		}
	}
	void cargaCategorias() {
		categorias = new HashMap(30);
		try {
			Tabla_Base top = BaseDatos.bd().tablabase("CategoriasEsta");
			top.leerDatos(null);
			top.beforeFirst();

			while (top.next()) {
				String codcate = new String(top.getString("CodigoEstadistico"));
				String descripcion = new String(top.getString("CategoriaEsta"));
				// Object[] a={codcate,descripcion};
				categorias.put(codcate, descripcion);
			}
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "No se pudo cargar categorias estadisticas.\n" + e.getMessage());
			e.printStackTrace();
			System.exit(1);
		}
	}
	void cargaSalasEspera() {
		salas = new HashMap(30);
		try {
			Tabla_Base top = BaseDatos.bd().tablabase("SalasEspera");
			top.leerDatos();
			top.beforeFirst();
			salas.put(new Integer(0), "");
			while (top.next()) {
				Integer idsala = new Integer(top.getInt("IdSalaEspera"));
				String descripcion = new String(top.getString("TextoSalaEspera"));
				// Object[] a={codcate,descripcion};
				salas.put(idsala, descripcion);
			}
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "No se pudo cargar las salas de espera.\n" + e.getMessage());
			e.printStackTrace();
			System.exit(1);
		}
	}

	void cargaPanelPorColas() {

		colas = new ArrayList();
		HashMap hcolas = new HashMap(30);
        boolean errores= false;
		try {
			Tabla_Base top = BaseDatos.bd().tablabase ("Colas");
			top.leerDatos("order by cola");
			itemColas = new ItemGridCola[top.recordsCount()];
			top.beforeFirst();
			int i = 0; 
			while (top.next()) {
				String cola = new String(top.getString("Cola"));
				String descripcion = new String(top.getString("Descripcion"));
				String boni = new String(Integer.toString( top.getInt ("Bonificacion")));
				Boolean activa = new Boolean(top.getBoolean("Activa"));
				Boolean CitaPrevia=new Boolean(top.getBoolean("CitaPrevia"));
				
			//	String codnave=new String(Integer.toString(top.getInt("Navegar")));
				String codesta = new String(top.getString("CodigoEstadistico"));
				Integer idsala = new Integer(top.getInt("IdSalaEspera"));
				String textosala=new String();
				if (!salas.containsKey(idsala)){
					errores=true;
					textosala="";
					JOptionPane.showMessageDialog(null, "Errores identificacion de sala de espera en cola " + cola);
				}
				else
				   textosala=((String) salas.get(idsala));
				
				String codcategoria = new String();
				if (!categorias.containsKey(codesta))
				   {errores=true;
				   codcategoria="";
				   JOptionPane.showMessageDialog(null, "Errores identificacion de la categoria estadistica en cola " + cola);
				}else
				  codcategoria=((String) categorias.get(codesta));
				boolean serviciosCP=conserviciosAsociados(cola);
				Boolean NifObligatorio=new Boolean(top.getBoolean("NifObligatorio"));
				Boolean ColaEspecial=new Boolean(top.getBoolean("ColaEspecial"));
                                Boolean opeHuecos=new Boolean(top.getBoolean("HuecosOpe"));
				String UmbralSuplencia=new String(Integer.toString(top.getInt("UmbralSuplencia")));
				itemColas[i++] = new ItemGridCola(cola,descripcion, codcategoria, textosala, activa.booleanValue(), boni,NifObligatorio,ColaEspecial.booleanValue(),UmbralSuplencia,CitaPrevia.booleanValue(),opeHuecos.booleanValue());

			}
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "No se pudo cargar colas.\n" + e.getMessage());
			e.printStackTrace();
			System.exit(1);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "No se pudo cargar colas.\n" + e.getMessage());
			e.printStackTrace();
			System.exit(1);
		}
		

	}

private boolean conserviciosAsociados(String colax){
//	boolean encontrada=false;
//	try {
//		TablaServicios top = BaseDatos.bd().tablaServicios();
//		top.leerDatos();
//		top.beforeFirst();
//
//		while (top.next() && !encontrada) {
//			String colasasociadas= top.getcolasasociadas();
//			if (colasasociadas.lastIndexOf(colax)!=-1){
//				encontrada=true;
//			}
//		}
//
//	} catch (SQLException e) {
//		e.printStackTrace();
//	}
	return false;
}
	
	private void initComponents() {
		jPanelColas = new JPanel();
		jPanelColas.setLayout(new BorderLayout());
		jPanel2 = new javax.swing.JPanel();
		jPanel1 = new javax.swing.JPanel();
		jPanel3 = new javax.swing.JPanel();

		jScrollPane1 = new javax.swing.JScrollPane();
		gridColas = new javax.swing.JTable();
		gridColas.getTableHeader().setReorderingAllowed(false);
		gridColas.setName("gridColas");

		jPanel1.setLayout(new java.awt.BorderLayout());

		smoothJLabel titulito = new smoothJLabel("ATENEO - Colas");
		titulito.setFont(new Font("Arial", Font.BOLD, 20));
		jPanel3.add(titulito);
		jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);

		jScrollPane1.setViewportView(gridColas);
		JButton jbNuevo = new JButton("Nuevo");
		jbNuevo.addActionListener(this);
		jPanel2.add(jbNuevo);
		jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
		jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);
		jPanel1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
		jPanelColas.add(jPanel1, java.awt.BorderLayout.CENTER);
		jPanelColas.setPreferredSize(new Dimension(650,250));

	}
	public void actionPerformed(ActionEvent e) {
		JButton jb = (JButton) e.getSource();
		if (jb.getActionCommand().equalsIgnoreCase("nuevo")) {
//			if (gridColas.getRowCount() >= 35) {
//				JOptionPane.showMessageDialog(null, "Numero maximo de servicios  a 35.", "Configuracion Colas", JOptionPane.ERROR_MESSAGE);
//			} else {
				frmMantenCola fO = new frmMantenCola(true, categorias,salas);
				fO.Alta();
				String letracola = fO.getCola();
				String letraCategoria = fO.getCodCate();
			        String citaprevia=fO.getGesHue();
				if (!letracola.equalsIgnoreCase("")) {
					if (compruebaCola(letracola)) {
							if (JOptionPane.showConfirmDialog(null, "Seguro deseas crear la cola: " + letracola + "?.\n No se podran borrar posteriormente.",
									"Confirmacion alta colas", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
							Tabla_Base top = BaseDatos.bd().tablabase ("Colas");
							try {
								String strSQL = "INSERT INTO colas (cola, descripcion,codigoestadistico,IdSalaEspera,activa,bonificacion,citaprevia,cerrada,numero,NifObligatorio,ColaEspecial,HuecosOpe) VALUES ('" + letracola + "','"
										+ fO.getDescripcion() + "','" + letraCategoria + "',"+fO.getIdSala()+"," + fO.getActivo()  +",'"+fO.getBonificacion()+"',"+citaprevia+",0,0," + fO.getNifObligatorio()+","+ fO.getColaEspecial()+","+fO.getOpeHue()+")";
			
								top.SQL(strSQL);
								actualizaColas();
							} catch (SQLException ex) {
								JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n" + ex.getMessage());
								ex.printStackTrace();
								System.exit(1);

							}

						}
					}
				}
			}
			
		


	}
	private boolean compruebaCola(String letracola){
		boolean salida=true;
		if (((GridTableModel) (gridColas.getModel())).Busca_cadena(0, letracola)){
			JOptionPane.showMessageDialog(null, "Letra de cola ya utilizada.", "Configuracion Colas", JOptionPane.ERROR_MESSAGE);
			salida=false;
		}
//		if (letracola.length()==2){
//			String primercaracter=letracola.substring(0, 1);
//			if (!((GridTableModel) (gridColas.getModel())).Busca_cadena(0, primercaracter)){
//				JOptionPane.showMessageDialog(null, "En las colas con 2 caracteres, el primer caracter debe identificar a una cola ya existente.", "Configuracion Colas", JOptionPane.ERROR_MESSAGE);
//				salida=false;
//			}
//		}
		return salida;
	}
	private javax.swing.JPanel jPanel1, jPanel2, jPanel3;
	private javax.swing.JScrollPane jScrollPane1;

	

	class ItemGridCola extends ItemGrid {
		ItemGridCola(String nif, String nombre, String categoria, String salaespera, boolean activo, 
				     String boni,boolean NifObligatorio,boolean ColaEspecial,String UmbralSuplencia,boolean CitaPrevia, boolean OpeHuecos) {
			valores = new Object[12];
			valores[0] = new String(nif);
			valores[1] = new String(nombre);
			valores[2] = new String(categoria);
			valores[3] = new String(salaespera);
			valores[4] = new Boolean(activo);
			valores[5] = new String(boni);
			valores[6] = new Boolean(NifObligatorio);
			valores[7] = new Boolean(ColaEspecial);
			valores[8] = new String(UmbralSuplencia);
			valores[9] = new Boolean(CitaPrevia);
                        valores[10] = new Boolean(OpeHuecos);

		}

	}
	
class celdarender extends DefaultTableCellRenderer{
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
		if (column==5){
			String valor=(String)value;
			valor=valor.trim();
			JCheckBox jcb=new JCheckBox();
			jcb.setSelected(valor.length()>0);
			jcb.setBackground(null);
			return jcb ;
		}
		else return null;
	}

}



	
}
