/* 
* 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 gestor;

import gestor.datos.*;
import gestor.datos.TablaColas;
import gestor.utiles.*;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import javax.swing.*;
import java.util.*;
import java.util.logging.Level;
import javax.swing.event.*;

public final class FormNuevoCandidato extends javax.swing.JFrame implements ISmartCardAvisable {

    private static final int GRABARCITA_ERROR_MANTENERDATOS = 0;
    private static final int GRABARCITA_OK = 1;
    private static final int GRABARCITA_TIQUET_MANUAL = 2;
    
    java.awt.event.ActionListener colaActionListener;
    java.awt.event.KeyAdapter controlTecla;
    java.awt.event.ActionListener colaSeleccionada;
    TablaColas colas;
    String coladeseada;
    Comunicaciones comunicaciones;
    Configuracion conf;
    JRadioButton rbInvisible;
    JRadioButton rbInvisible2;
    String nif;
    String nombre;
    String letraCola;
    String descripcionCola;
    Date hora = null;
    Boolean hManual = false;
    TablaCandidatos candidatos;
    TablaPresentes presentes;
    gestor.datos.RegistroCandidatos reg = null;
    boolean manual = false;

    public FormNuevoCandidato() {
        conf = Configuracion.instanciaUnica();
        initComponents();
        Global.main.registrarVentanaEnLectorSC(this);
        crearColas();
        candidatos = TablaCandidatos.getTablaCandidatos();
        presentes = TablaPresentes.getTablaPresentes();
        comunicaciones = Comunicaciones.comm;
        tabPanel.addChangeListener((ChangeEvent e) -> {
            cambiadoPanel();
        });
        tabPanel.setSelectedIndex(0);
    }

    @Override
    public void avisoSmartCardInsertada(String nif, String nombre) {
        this.edNif.setText(nif);
        this.edNombre.setText(nombre);
        this.repaint();
    }

    @Override
    public void avisoSmartCardExtraida() {
    }

    void pedirHora() {
        hManual = false;
        DlgPeticionHora dph = new DlgPeticionHora(this);
        dph.setVisible(true);
        if (dph.resultado != null) {
            hora = ponerFechaAlDia(dph.resultado);
            hManual = true;
        }
        dph.dispose();
    }

    void cerrar() {
        Global.principal.refrescarDatos(false);
        Global.main.registrarVentanaEnLectorSC(null);
        dispose();
    }

    void activada() {
        Global.main.registrarVentanaEnLectorSC(this);
    }

    public void rellenar(gestor.datos.RegistroCandidatos reg) {
        if (reg == null) {
            borraCampos();
        } else {
            this.reg = reg;
            this.edNif.setText(reg.nif);
            this.edNombre.setText(reg.nombre);
            this.manual = true;
            hManual = false;
            buscaColaTeclaPulsada(reg.cola.charAt(0));
        }
    }

    Date ponerFechaAlDia(String strHora) {
        GregorianCalendar hoy = new GregorianCalendar();
        GregorianCalendar hhora = new GregorianCalendar();
        String[] pp = Global.split(strHora, ':');
        hhora.set(hoy.get(Calendar.YEAR), hoy.get(Calendar.MONTH), hoy.get(Calendar.DAY_OF_MONTH),
                Integer.parseInt(pp[0]), Integer.parseInt(pp[1]), 0);
        return new Date(hhora.getTimeInMillis());
    }

    public void cambiarEstadoCola(String codCola, boolean cerrada, boolean colaespecial) {
        JPanel panel;
        codCola += "-";
        if (!colaespecial) {
            panel = PanelColas;
        } else {
            panel = panelColasEspecialesInterior;
        }
        for (int i = 0; i < panel.getComponentCount() - 1; i++) {
            JRadioButton cola = (JRadioButton) panel.getComponent(i);
            if (cola.getText().startsWith(codCola)) {
                cola.setEnabled(!cerrada);
                return;
            }
        }
    }

    void procesaTeclas(java.awt.event.KeyEvent evt, int maximo) {
        char c = evt.getKeyChar();
        if (Character.isLetter(c)) {
            evt.setKeyChar(Character.toUpperCase(c));
        }
        if (((javax.swing.JTextField) evt.getComponent()).getText().length() >= maximo) {
            String nifAbuscar = ((javax.swing.JTextField) evt.getComponent()).getText().toUpperCase();
            edNombre.setText(candidatos.buscarNombrePorNif(nifAbuscar));
            evt.consume();
        }
    }

    void mandarPeticion() {
        nif = edNif.getText().toUpperCase();
        if (nif.startsWith("#") && conf.permitirNoIden == false) {
            JOptionPane.showMessageDialog(this, "Identificación fiscal no valida, no se permite #");
            edNif.requestFocus();
            return;
        }
        if (nif.startsWith("#") && nif.length() < 9) {
            JOptionPane.showMessageDialog(this, "Identificación fiscal  minimo 9 caracteres");
            edNif.requestFocus();
            return;
        }
        if (nif.startsWith("#") && nif.length() > 16) {
            JOptionPane.showMessageDialog(this, "Identificación fiscal  no puede tener mas de 16 caracteres");
            edNif.requestFocus();
            return;
        }
        //  nif = formatoNif(nif);
        if (!validarCola()) {
            manual = false;
            return;
        }
        RegistroCola cola = colas.buscar(letraCola);
        // no se pasó reg. Buscamos por si el nif estuviera en la lista de citas
        if (cola.citaPrevia) {
            if (reg == null) {
                RegistroCandidatos regP = candidatos.buscarPorNifPresente(nif);
                if (regP != null) {
                    JOptionPane.showMessageDialog(this, nif + " -- " + regP.nombre + "  tiene el tique " + regP.numeroTicket + " pendiente de ser atendido\n No se emitirá nuevo tique");
                    return;
                }
                regP = candidatos.buscarPorNifyCola(nif, letraCola);
                if (regP != null) {
                    reg = regP;
                    edNombre.setText(reg.nombre);
                    repaint();
                } else if (Global.main.gestionHuecos) {
                    int resp = grabarCita(cola);
                    if (resp == GRABARCITA_OK) {
                        borraCampos();
                        tabPanel.setSelectedIndex(0);
                        return;
                    } else if (resp == GRABARCITA_ERROR_MANTENERDATOS) {
                        return;
                    }
                }
            } else {
            //(candidatos.PosicionarPorId(reg.id);
                //TODO no se que pasará aqui
            }
        } else {
            reg = null;
        }
        if (!validarNombre(cola) || !confirmarEnvio()) {
            manual = false;
            return;
        }
        if (reg != null && (!reg.estadoVacio() && !reg.estado.equals("D"))) {
            reg = null;
        }
        java.sql.Timestamp ts;
        if (reg == null) {       // este es NUEVO-NUEVO
            if (hora == null) {
                hora = Fecha.horaNula;
            }
            ts = new java.sql.Timestamp(hora.getTime());
            String horaStr = ts.toString();
            comunicaciones.enviar(Comunicaciones.ENVIO_NUEVO_CANDIDATO, Global.main.numeroGestor,
                    nif, nombre, horaStr, letraCola, "_ignorarHuecos");
        } else {        // este es un reutilizado de Cita Previa
            if (hora == null) {
                long ahora = System.currentTimeMillis();
                ts = new java.sql.Timestamp(ahora + Configuracion.instanciaUnica().margenPenalizacion);
            } else {
                ts = new java.sql.Timestamp(hora.getTime());
            }
            reg.horaCalculada = ts;
            reg.horaCalculada2 = ts;
            RegistroCandidatos regP = candidatos.buscarPorId(reg.id);
            if (Global.principal.formCandidatos == null) {
                Global.principal.preparaFormCandidatos();
            }
            if (!manual) {
                Global.principal.formCandidatos.procesarPresente(reg, true);
            } else {
                Global.principal.formCandidatos.procesarPresente(reg);
            }
        }
        manual = false;
        borraCampos();
        tabPanel.setSelectedIndex(0);
    }

    int grabarCita(RegistroCola cola) {
        if (letraCola == null) {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una cola");
            return GRABARCITA_ERROR_MANTENERDATOS;
        }
        nif = edNif.getText().trim();
        if (nif.length() < 1 || !Global.nifValido(nif)) {
            JOptionPane.showMessageDialog(this, "Identificación fiscal no valida");
            edNif.requestFocus();
            return GRABARCITA_ERROR_MANTENERDATOS;
        }
        nif = formatoNif(nif);
        nombre = edNombre.getText().trim();
        if (cola.necesitaApellido() && nombre.length() < 1) {
            nombre = " ";
        }
        RegistroCandidatos regP = candidatos.buscarPorNifPresente(nif);
        if (regP != null) {
            JOptionPane.showMessageDialog(this, nif + " -- " + regP.nombre + "  tiene el tique " + regP.numeroTicket + " pendiente de ser atendido\n No se admite nueva Reserva");
            return GRABARCITA_OK;
        }
        regP = candidatos.buscarPorNifyCola(nif, letraCola);
        if (regP != null) {
            JOptionPane.showMessageDialog(this, nif + " -- " + regP.nombre + "  YA tiene cita concertada para la cola: " + letraCola + "\n No se admite nueva Reserva");
            return GRABARCITA_OK;
        }

        RegistroHuecos[] regs = Global.main.huecos.buscarDisponibles(letraCola, gestor.utiles.Fecha.ahora());
        boolean todosFueraDeTurno = Global.main.huecos.todosFueraDeTurno(regs);
        if (todosFueraDeTurno) {
            if (Global.respCitasTurnoTarde.val != null) {
                todosFueraDeTurno = !Global.respCitasTurnoTarde.val.equals("S");
            } else {
                MensajeAnulable anulable = new MensajeAnulable(this, Global.respCitasTurnoTarde);
                anulable.setTexto("<html><center>SÓLO quedan huecos para el turno de TARDE<br>"
                        + "<¿Quiere seleccionar uno de ellos ?</center></html>");
                if (anulable.mostrar()) {
                    todosFueraDeTurno = false;
                }
            }
        }
        if (regs == null || regs.length == 0 || todosFueraDeTurno) {
            if (Global.respTiketManual.val != null) {
                if (Global.respTiketManual.val.equals("S")) {
                    if (hManual == false) {
                        hora = ponHoraUltima();
                    }
                    return GRABARCITA_TIQUET_MANUAL;
                } else {
                    JOptionPane.showMessageDialog(this, "No hay huecos disponibles para el servicio solicitado");
                    return GRABARCITA_OK;
                }
            }
            MensajeAnulable anulable = new MensajeAnulable(this, Global.respTiketManual);
            anulable.setTexto("<html><center>No quedan huecos disponibles para el servico solicitado<br>"
                    + "<¿Tiene autorización para emitir un tique sin reserva de hueco?</center></html>");
            if (anulable.mostrar()) {
                if (hManual == false) {
                    hora = ponHoraUltima();
                }
                return GRABARCITA_TIQUET_MANUAL;
            } else {
                return GRABARCITA_OK;
            }
        }
        if (hManual) {
            hManual = false;
            return GRABARCITA_TIQUET_MANUAL;
        }
        DlgOfrecerCitas dlgCitas = new DlgOfrecerCitas(this);
        try {

            dlgCitas.cargar(regs, "Cola " + letraCola + ":  " + cola.descripcion);
            dlgCitas.setSize(710, 480);
            dlgCitas.setLocationRelativeTo(null);

            dlgCitas.setVisible(true);

            RegistroHuecos regHuecos = dlgCitas.regSeleccionado;

            if (regHuecos != null) {

                comunicaciones.enviar(Comunicaciones.ENVIO_NUEVO_CANDIDATO_NOPRESENTE, Global.main.numeroGestor,
                        nif, nombre, regHuecos.horaCita.toString(), letraCola);
                hora = regHuecos.horaCita;

            }
            dlgCitas.dispose();
            dlgCitas = null;
            return GRABARCITA_OK;

        } catch (Exception exc) {
            dlgCitas.dispose();
            dlgCitas = null;
            Main.log.log(Level.WARNING, "Error en FormCandiadatos gestionando huecos:\n{0}", exc.getMessage().toString());
            return GRABARCITA_ERROR_MANTENERDATOS;
        }
    }

    public Date ponHoraUltima() {
        return presentes.ultimoPresente(letraCola);
    }

    public String formatoNif(String nif) {
        if (nif.length() < 2) {
            return "XXX";
        }
        if (nif.startsWith("XXX")) {
            return nif;
        }
        return nif;
    }

    void borraCampos() {
        edNif.setText("");
        edNombre.setText("");
        hora = null;
        quitarSeleccion();
        edNif.requestFocus();
        reg = null;
        hManual = false;
    }

    void quitarSeleccion() {
        letraCola = null;
        rbInvisible.requestFocus();
        rbInvisible.setSelected(true);
        rbInvisible2.requestFocus();
        rbInvisible2.setSelected(true);
    }

    void cambiadoPanel() {
        quitarSeleccion();
    }

    void buscaColaTeclaPulsada(java.awt.event.KeyEvent evt) {
        char c = evt.getKeyChar();
        if (Character.isLetter(c)) {
            c = Character.toUpperCase(c);
            buscaColaTeclaPulsada(c);
        }
    }

    void buscaColaTeclaPulsada(char c) {
        try {
            int n = PanelColas.getComponentCount();
            JRadioButton cola;
            for (int i = 0; i < n; i++) {
                cola = (JRadioButton) PanelColas.getComponent(i);
                String nombreCola = cola.getText();
                if (nombreCola.length() > 0 && c == nombreCola.charAt(0) && cola.isEnabled()) {
                    cola.requestFocus();
                    cola.setSelected(true);
                    guardarColaSeleccionada(cola);
                    return;
                }
            }
        } catch (Exception e) {
         // NO queremos hacer nada ni no se encuentra la cola de la tecla pulsada
            // digamos que es intrascendente
        }
    }

    boolean validarCola() {
        if (letraCola == null) {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una cola");
            return false;
        }
        if (nif.equals("000000000")) {
            JOptionPane.showMessageDialog(this, "Se ha modificado el método de obtención de tique\nIntroduzca un nif correcto y continue adelante");
            edNif.setText("");
            edNif.requestFocus();
            return false;
        }
        if (colas.buscar(letraCola).nifObligatorio || !nif.startsWith("XXX")) {
            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            if (!Global.nifValido(nif)) {
                JOptionPane.showMessageDialog(this, "Identificación fiscal no valida");
                edNif.requestFocus();
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                return false;
            }
        }
        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        return true;
    }

    boolean validarNombre(RegistroCola cola) {
        nombre = edNombre.getText().trim();
        if (nombre.length() < 3) {
            if (cola.nifObligatorio && cola.necesitaApellido()) {
                JOptionPane.showMessageDialog(this, "Complete el NOMBRE (Mín. 3 caract. del Apellido)");
                edNombre.requestFocus();
                return false;
            } else if (nombre.equals("")) {
                nombre = " ";
            }
        }
        return true;
    }

    boolean confirmarEnvio() {
        String mensaje = "Confirme emisión de tique para la cola: \n" + descripcionCola;
        int r = JOptionPane.showConfirmDialog(this, mensaje, "NUEVO TIQUE", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        return (r == JOptionPane.YES_OPTION);
    }

    void crearColas() {
        preparaAcciones();
        colas = TablaColas.getTablaColas();
        TreeMap<String, RegistroCola> colasValidas = new TreeMap<>();
        TreeMap<String, RegistroCola> colasValidasEsp = new TreeMap<>();
        try {
            for (RegistroCola cola : colas) {
                if (cola.activa) {
                    if (!cola.colaEspecial) {
                        colasValidas.put(cola.cola, cola);
                    } else {
                        colasValidasEsp.put(cola.cola, cola);
                    }
                }
            }
            for (RegistroCola cola : colasValidas.values()) {
                JRadioButton boton = nuevoBotonCola(cola.cola + "-" + cola.descripcion);
                if (cola.cerrada) {
                    boton.setEnabled(false);
                }
            }
            if (colasValidasEsp.size() == 0) {
                tabPanel.remove(1);
            } else {
                for (RegistroCola cola : colasValidasEsp.values()) {
                    JRadioButton boton = nuevoBotonColaEspecial(cola.cola + "-" + cola.descripcion);
                    if (cola.cerrada) {
                        boton.setEnabled(false);
                    }
                }
            }
            rbInvisible = new JRadioButton();
            GrupoColas.add(rbInvisible);
            PanelColas.add(rbInvisible);
            rbInvisible.setVisible(false);
            rbInvisible2 = new JRadioButton();
            GrupoColasEspeciales.add(rbInvisible2);
            panelColasEspecialesInterior.add(rbInvisible2);
            rbInvisible2.setVisible(false);
        } catch (Exception exc) {
            Main.log.log(Level.WARNING, "Error al formar botones de seleccion de cola: {0}", exc.getMessage());
        }
    }

    JRadioButton nuevoBotonCola(String Texto) {
        try {
            JRadioButton cola = new JRadioButton();
            cola.setText(Texto);
            cola.setFont(cola.getFont().deriveFont(Font.PLAIN, 20));
            cola.setBackground(Color.WHITE);
            cola.setForeground(Color.BLACK);
            cola.addKeyListener(controlTecla);
            cola.addActionListener(colaSeleccionada);
            GrupoColas.add(cola);
            PanelColas.add(cola);
            return cola;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    JRadioButton nuevoBotonColaEspecial(String Texto) {
        try {
            JRadioButton cola = new JRadioButton();
            cola.setText(Texto);
            cola.setFont(cola.getFont().deriveFont(Font.PLAIN, 20));
            cola.setContentAreaFilled(false);
            cola.addActionListener(colaSeleccionada);
            GrupoColasEspeciales.add(cola);
            panelColasEspecialesInterior.add(cola);
            return cola;
        } catch (Exception e) {
            //TODO mejorar excepcion
            e.printStackTrace();
        }
        return null;
    }

    void preparaAcciones() {
        controlTecla = new java.awt.event.KeyAdapter() {

            private boolean esMia = false;

            @Override
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN) {
                    getFocusOwner().transferFocus();
                } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP) {
                    getFocusOwner().transferFocusBackward();
                } else if (evt.getKeyChar() == '\n') {
                    esMia = true;
                }
            }

            @Override
            public void keyReleased(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN
                        || evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP) {
                    java.awt.Component comp = getFocusOwner();
                    if (comp instanceof AbstractButton) {
                        ((AbstractButton) comp).setSelected(true);
                    }
                }
                guardarColaSeleccionada((JRadioButton) evt.getSource());
                if (evt.getKeyChar() == '\n') {
                    if (esMia) {
                        esMia = false;
                        mandarPeticion();
                    } else {
                        return;
                    }
                }
                buscaColaTeclaPulsada(evt);
            }
        };

        colaSeleccionada = (java.awt.event.ActionEvent evt) -> {
            guardarColaSeleccionada((JRadioButton) evt.getSource());
        };
    }

    void guardarColaSeleccionada(JRadioButton botonCola) {
        String[] pp = Global.split(botonCola.getText(), '-');
        letraCola = pp[0].trim();
        descripcionCola = pp[1].trim();
    }

    void marcadoImprimirTicket() {
        boolean marcado = ckbTicket.isSelected();
        Global.principal.marcarImprimirTicket(marcado);
    }

    public void ponMarcarImprimir(boolean poner) {
        ckbTicket.setSelected(poner);
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        GrupoColas = new javax.swing.ButtonGroup();
        GrupoColasEspeciales = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        edNif = new javax.swing.JTextField();
        edNombre = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        ckbTicket = new javax.swing.JCheckBox();
        ckbTicket.setSelected(conf.imprimirTicket);
        btEspecificarHora = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        btOk = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        tabPanel = new javax.swing.JTabbedPane();
        PanelColas = new javax.swing.JPanel();
        PanelColasEspeciales = new javax.swing.JScrollPane();
        panelColasEspecialesInterior = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Nueva cita");
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 10, 1));
        jPanel1.setLayout(new java.awt.GridBagLayout());

        edNif.setColumns(16);
        edNif.setFont(new java.awt.Font("MS Sans Serif", 0, 12)); // NOI18N
        edNif.setToolTipText("<html>Si es un documento distinto deIdentificaión fiscal.<br /> Primer  dígito <b> '#' <br />Obligatorio 9 caracteres</b>");
        edNif.setMinimumSize(new java.awt.Dimension(45, 22));
        edNif.setPreferredSize(new java.awt.Dimension(282, 22));
        edNif.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                PulsadoIntro(evt);
            }
        });
        edNif.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                edNifKeyTyped(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 101;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0);
        jPanel1.add(edNif, gridBagConstraints);

        edNombre.setColumns(40);
        edNombre.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                PulsadoIntro(evt);
            }
        });
        edNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                edNombreKeyTyped(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.ipadx = 319;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(7, 0, 0, 38);
        jPanel1.add(edNombre, gridBagConstraints);

        jLabel2.setText("Apellidos Nombre:");
        jLabel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 8, 1, 1));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.ipadx = 97;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(7, 0, 0, 0);
        jPanel1.add(jLabel2, gridBagConstraints);

        jLabel1.setText("Identificación fiscal: ");
        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 8, 1, 1));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 67;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(7, 0, 0, 0);
        jPanel1.add(jLabel1, gridBagConstraints);

        ckbTicket.setText("Imprimir tique");
        ckbTicket.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ckbTicketActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
        jPanel1.add(ckbTicket, gridBagConstraints);

        btEspecificarHora.setText("Modificar Hora");
        btEspecificarHora.setFocusable(false);
        btEspecificarHora.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btEspecificarHoraActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 5;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(8, 0, 0, 0);
        jPanel1.add(btEspecificarHora, gridBagConstraints);

        getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

        btOk.setText("Solicitar Tique");
        btOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btOkActionPerformed(evt);
            }
        });
        jPanel2.add(btOk);

        jButton1.setText("Cerrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton1);

        getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);

        tabPanel.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
        tabPanel.setDoubleBuffered(true);
        tabPanel.setFocusable(false);

        PanelColas.setBackground(new java.awt.Color(255, 255, 255));
        PanelColas.setLayout(new java.awt.GridLayout(15, 1));
        tabPanel.addTab("Colas normales", PanelColas);

        panelColasEspecialesInterior.setBackground(new java.awt.Color(255, 255, 225));
        panelColasEspecialesInterior.setLayout(new javax.swing.BoxLayout(panelColasEspecialesInterior, javax.swing.BoxLayout.Y_AXIS));
        PanelColasEspeciales.setViewportView(panelColasEspecialesInterior);

        tabPanel.addTab("Colas especiales", PanelColasEspeciales);

        getContentPane().add(tabPanel, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void btEspecificarHoraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEspecificarHoraActionPerformed
        pedirHora();
    }//GEN-LAST:event_btEspecificarHoraActionPerformed

   private void ckbTicketActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckbTicketActionPerformed
       marcadoImprimirTicket();
   }//GEN-LAST:event_ckbTicketActionPerformed

    private void PulsadoIntro(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_PulsadoIntro
        this.getFocusOwner().transferFocus();
    }//GEN-LAST:event_PulsadoIntro

   private void edNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_edNombreKeyTyped
       procesaTeclas(evt, 40);
   }//GEN-LAST:event_edNombreKeyTyped

   private void edNifKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_edNifKeyTyped
       String nift = edNif.getText();
       if (nift.startsWith("#")) {
           procesaTeclas(evt, 16);
       } else {
           procesaTeclas(evt, 16);
       }
   }//GEN-LAST:event_edNifKeyTyped

   private void btOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOkActionPerformed
       mandarPeticion();
   }//GEN-LAST:event_btOkActionPerformed

   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
       cerrar();
   }//GEN-LAST:event_jButton1ActionPerformed

   private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
       activada();
   }//GEN-LAST:event_formWindowActivated

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup GrupoColas;
    private javax.swing.ButtonGroup GrupoColasEspeciales;
    private javax.swing.JPanel PanelColas;
    private javax.swing.JScrollPane PanelColasEspeciales;
    private javax.swing.JButton btEspecificarHora;
    private javax.swing.JButton btOk;
    private javax.swing.JCheckBox ckbTicket;
    private javax.swing.JTextField edNif;
    private javax.swing.JTextField edNombre;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel panelColasEspecialesInterior;
    private javax.swing.JTabbedPane tabPanel;
    // End of variables declaration//GEN-END:variables
}
