/* 
* 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.HeadlessException;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.sql.SQLException;
import java.util.ArrayList;


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

import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;




import servidor.configurador.Varios.miJComboBoxEditor;
import servidor.configurador.Varios.miJComboBox;

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

import servidor.utiles.smoothJLabel;


/**
 * Panel de mantenimiento de los operadores
 * @author f41000g9
 *
 */
	public class frmZonasAtencion extends  MouseAdapter implements ActionListener
	{

		ArrayList ZonasAtencion = null;
		JPanel jPanelZonasAtencion = null;
		ItemGridZonaAtencion[] itemZonasAtencion;
		String[] cabeceras = {"Id", "Descripcion"};
		JTable gridZonasAtencion;
		private javax.swing.JPanel jPanel1,jPanel2,jPanel3;
		private javax.swing.JScrollPane jScrollPane1;
		
		public frmZonasAtencion() {
			super();
			initComponents();
			actualizaZonasAtencion();
			gridZonasAtencion.setEnabled(false);
			gridZonasAtencion.addMouseListener(this);
		}
		
		private void actualizaZonasAtencion(){
			this.cargaPanelPorZonaAtencion();
			gridZonasAtencion.setModel(new GridTableModel(itemZonasAtencion,
					cabeceras));
			gridZonasAtencion.getColumnModel().getColumn(0).setMaxWidth(0);
			gridZonasAtencion.getColumnModel().getColumn(0).setMinWidth(0);
			gridZonasAtencion.getColumnModel().getColumn(0).setPreferredWidth(0);
			gridZonasAtencion.getColumnModel().getColumn(0).setResizable(false);
		}		
		
		

		public void mousePressed(java.awt.event.MouseEvent evt) {
			if (((JTable) evt.getSource()).getName() == "gridZonasAtencion") {
				seleccionarFilaGrid(gridZonasAtencion, evt.getPoint());
				if (evt.getClickCount() == 2) {
					frmMantenZonaAtencion fO = new frmMantenZonaAtencion(frmConfiguraServidor.getConfiFrame(),true);
					int fila=gridZonasAtencion.getSelectedRow();
					int idsala=((Integer) gridZonasAtencion.getValueAt(fila, 0)).intValue();
					fO.Modifica((String) gridZonasAtencion.getValueAt(fila, 1));
					if (!fO.getDescripcion().equalsIgnoreCase("")) {
						String textosala = fO.getDescripcion().toUpperCase().trim();
						try{
							TablaZonasAtencion top = BaseDatos.bd().tablaZonasAtencion();
							if (this.idZonaAtencion(textosala)==-1){
								top.SQL("UPDATE SalasAtencion SET TextoSalaAtencion='"
										+textosala + "' WHERE IdSalaAtencion="
										+idsala) ;
									actualizaZonasAtencion();
								} 
							else
							{JOptionPane.showMessageDialog(null,
									"La Zona de atencion: '" + textosala+"' ya existe.");
							}
						}
						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 jPanelZonasAtencion;
		}

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

		void cargaPanelPorZonaAtencion() {

			ZonasAtencion = new ArrayList();
			try {
				TablaZonasAtencion top = BaseDatos.bd().tablaZonasAtencion();
				top.leerDatos();
				itemZonasAtencion = new ItemGridZonaAtencion[top.recordsCount()];
				top.beforeFirst();
				int i = 0;
				while (top.next()) {
					String textosala = new String(top.getDescripcion());
		
					int id=top.getId();
					itemZonasAtencion[i++] = new ItemGridZonaAtencion(id,textosala);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}


		}

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

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

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

			smoothJLabel titulito=new smoothJLabel("ATENEO - Zonas de atencion");
			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(gridZonasAtencion);
	        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));
			jPanelZonasAtencion.add(jPanel1, java.awt.BorderLayout.CENTER);
			
		}
		public void actionPerformed(ActionEvent e) {
			JButton jb = (JButton) e.getSource();
			if (jb.getActionCommand().equalsIgnoreCase("nuevo")) {
				frmMantenZonaAtencion fO = new frmMantenZonaAtencion(
						frmConfiguraServidor.getConfiFrame(), true);
				fO.Alta();
				if (!fO.getDescripcion().equalsIgnoreCase("")) {
					String textosala = fO.getDescripcion().toUpperCase().trim();
					try{	
						TablaZonasAtencion top = BaseDatos.bd().tablaZonasAtencion();
						if (this.idZonaAtencion(textosala)==-1){
								if (JOptionPane.showConfirmDialog(	null,
									"¿Seguro deseas crear el ZonaAtencion: "
											+ textosala
											+ "?.\n No se podra borrar posteriormente.",
									"Confirmacion alta Salas Espera",
									JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
						
									top.nuevoZonaAtencion(textosala);
									actualizaZonasAtencion();
								}	
						}
						else
						{JOptionPane.showMessageDialog(null,
								"La Zona de atencion: '" + textosala+"' ya existe.");
						}
					}
						catch  (SQLException ex){
							JOptionPane.showMessageDialog(null,
							"No se pudo actualizar la base de datos.\n"+ex.getMessage());
						     ex.printStackTrace();
						     System.exit(1);
						} 
					}
				}
			
	
		}

		int idZonaAtencion(String zona){
			int contador=0;
			ItemGridZonaAtencion item;
			String zonagrid;
			for (int i=0;i<itemZonasAtencion.length;i++){
				item=itemZonasAtencion[i];
				zonagrid=(String)item.valores[1];
				if (zonagrid.equalsIgnoreCase(zona)){
					return ((Integer)(item.valores[0])).intValue();
				}
			}
			return -1;
		}
		

		class frmMantenZonaAtencion extends JDialog implements ActionListener {

			private JPanel jContentPane = null;
			private JComboBox jtxtTextoSala1 = null;
			private JComboBox jtxtTextoSala2 = null;
			private JButton jbAceptar = null;
			private JButton jbCancelar = null;
			private String descripcion="";
			private String antdescripcion="";
			private final String[] palabrassonoras={"PLANTA","SALA","AREA","ZONA"};
			private final String[] numeroletras={"1","2","3","4","5","6","7","8","9","-3","-2","-1","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

			
			public frmMantenZonaAtencion(JFrame fconfi,boolean modal) throws HeadlessException {
				super(fconfi,modal);
				initialize();
			}

			public void Modifica( String textosala) {
				String[] palabras=textosala.split(" ");
				antdescripcion=textosala;
				this.jtxtTextoSala1.getEditor().setItem((palabras.length>0)?palabras[0]:"");
				this.jtxtTextoSala2.getEditor().setItem((palabras.length>1)?palabras[1]:"");
				this.setLocationRelativeTo (null);
				this.setVisible(true);
			}
			public void Alta() {
				this.jtxtTextoSala1.getEditor().setItem("");
				this.jtxtTextoSala2.getEditor().setItem("");
				this.setLocationRelativeTo (null);
				this.setVisible(true);
			}
			private void initialize() {
				this.setSize(372, 170);
				this.setTitle("Mantenimiento Zonas de Atencion");
				this.setContentPane(getJContentPane());
			}

			private JPanel getJContentPane() {
				if (jContentPane == null) {
					JLabel jLabel1 = new JLabel("Descripcion:");
					jLabel1.setBounds(new java.awt.Rectangle(10, 12, 74, 26));
					

					jContentPane = new JPanel();
					jContentPane.setLayout(null);
				
					jtxtTextoSala1 = new miJComboBox(palabrassonoras);
					jtxtTextoSala1.setEditor(new miJComboBoxEditor(jtxtTextoSala1,10));
					jtxtTextoSala1.setEditable(true);
					jtxtTextoSala1.setToolTipText("Aparecera en el monitor cuando el ticket sea asignado a un puesto que este asociado a esta zona.\nSe leeran por altavoz si existen todos los ficheros de voz de cada palabra.");
					jtxtTextoSala1.setBounds(new java.awt.Rectangle(85, 12, 100, 23));
					jtxtTextoSala1.addKeyListener(new Varios.MiAdaptadorCadena());
					jContentPane.add(jtxtTextoSala1, null);
					
					jtxtTextoSala2 = new miJComboBox(numeroletras);
					jtxtTextoSala2.setEditor(new miJComboBoxEditor(jtxtTextoSala2,8));
					jtxtTextoSala2.setEditable(true);
					jtxtTextoSala2.setToolTipText("Aparecera en el monitor cuando el ticket sea asignado a un puesto que este asociado a esta zona.\nSe leeran por altavoz si existen todos los ficheros de voz de cada palabra.");
					jtxtTextoSala2.setBounds(new java.awt.Rectangle(205, 12, 100, 23));
					jtxtTextoSala2.addKeyListener(new Varios.MiAdaptadorCadena());
					jContentPane.add(jtxtTextoSala2, null);
					
			
					jContentPane.add(jLabel1, null);
					//jLabel =new JLabel("Activo:");
					//jLabel.setBounds(new java.awt.Rectangle(12, 78, 57, 25));

					jbAceptar = new JButton("Aceptar");
					jbAceptar.setBounds(new java.awt.Rectangle(78, 70, 83, 25));
					jbAceptar.addActionListener(this);
					jContentPane.add(jbAceptar, null);
					jbCancelar = new JButton("Cancelar");
					jbCancelar.setBounds(new java.awt.Rectangle(194, 70, 89, 25));
					jbCancelar.setText("Cancelar");
					jbCancelar.addActionListener(this);
					jContentPane.add(jbCancelar, null);
				}
				return jContentPane;
			}


			public void actionPerformed(ActionEvent e) {
				JButton jb = (JButton) e.getSource();
				if (jb.getActionCommand().equalsIgnoreCase("cancelar")) {
					descripcion="";
					this.setVisible(false);
				}
				if (jb.getActionCommand().equalsIgnoreCase("aceptar")) {
					descripcion=((String)this.jtxtTextoSala1.getSelectedItem()).trim().toUpperCase();
					//descripcion=descripcion.replaceAll("\u0020\u0020*", " ");
					descripcion=(descripcion+" "+((String)this.jtxtTextoSala2.getSelectedItem()).trim().toUpperCase()).trim();
					if ( descripcion.length()==0 || descripcion.length()>18){
						JOptionPane.showMessageDialog(null, "Sala de espera mal definida");
					}
					else
					this.setVisible(false);
				}

			}
			public String getDescripcion(){
				if (antdescripcion.equals(descripcion)) return "";
				return descripcion.trim();
			}
			
		}
	
		class ItemGridZonaAtencion extends ItemGrid {
			ItemGridZonaAtencion(int id,String textosala) {
				valores = new Object[2];
				valores[0] = new Integer(id);
				valores[1] = new String(textosala);
			}

		}



		
					
		
		public static void main(String[] argv) {

			frmZonasAtencion fp = new frmZonasAtencion();
			JFrame jf = new JFrame("gg");
			jf.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
			jf.setContentPane(fp.contenido());
			jf.pack();
			jf.setVisible(true);

		}	
		
	}	
	