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

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.*;
import administrador.utiles.Global;

public final class FormPrincipal extends javax.swing.JFrame {

    boolean existeResumen = false;
    public PanelBase panelSeleccionado;
    public boolean iconosCargados = false;
    ImageIcon[] iconosEstado;

    public FormPrincipal() {
        Global.principal = this;
        try {
            setIconImage(new javax.swing.ImageIcon(getClass().getResource("/recursos/ateneo32x32.gif")).getImage());
        } catch (Exception exc) {
            exc.printStackTrace();
        }
        initComponents();
        this.setTitle(this.getTitle() + leerVersion());
        cargarPaneles();
        activarMenus(false, true);
    }

    String leerVersion() {
        File jar = new File("Administrador.jar");
        Date d = new Date(jar.lastModified());
        SimpleDateFormat timeFormat = new java.text.SimpleDateFormat("dd/MM HH:mm");
        return "- " + timeFormat.format(d) + " - ";
    }

    PanelServidor nuevoPanel(String nombre, String ip) {
        PanelServidor panel = new PanelServidor(nombre, ip);
        tabPanel.add(panel);
        tabPanel.setTitleAt(tabPanel.getComponentCount() - 1, nombre);
        return panel;
    }

    void panelResumen() {
    }

    public void hacerVisible() {
        if (!this.isFocused()) {
            setState(JFrame.ICONIFIED);
            setState(JFrame.NORMAL);
        }
        if (getState() == JFrame.ICONIFIED) {
            setState(JFrame.NORMAL);
        }
        toFront();
    }

    void cargarPaneles() {
        Configuracion conf = Configuracion.instanciaUnica();
        if (conf.nombreServidorLocal.length() > 0 && (conf.IpServidorLocal.length() > 0 || conf.usandoUDP)) {
            PanelServidor local = nuevoPanel(conf.nombreServidorLocal, "");
            local.hacerLocal();
            if (versionSO() > 5) {
                local.esWindowsVista(true);
            }
        }
        File ficheroServidores = new File("FicheroServidores.ini");
        if (ficheroServidores.exists()) {
            try {
                Properties props = new Properties();
                props.load(new FileInputStream(ficheroServidores));
                Enumeration ps = props.propertyNames();
                while (ps.hasMoreElements()) {
                    String key = (String) ps.nextElement();
                    nuevoPanel(key, props.getProperty(key));
                }
                panelResumen();
            } catch (Exception exc) {
                exc.printStackTrace();
                System.exit(-1);
            }
        }
        panelSeleccionado = (PanelBase) tabPanel.getComponentAt(0);
        panelSeleccionado.recibirFoco();
    }

    public int versionSO() {
        try {
            String versionWindows = System.getProperty("os.version").toLowerCase();
            int ver = Double.valueOf(versionWindows).intValue();
            return ver;
        } catch (Exception exc) {
            exc.printStackTrace();
            return 0;
        }
    }

    void cambiarPanel() {
        if (panelSeleccionado == null) {
            return;
        }
        PanelBase nuevoPanel = (PanelBase) tabPanel.getSelectedComponent();
        if (nuevoPanel != panelSeleccionado) {
            panelSeleccionado.perderFoco();
            panelSeleccionado = nuevoPanel;
            panelSeleccionado.recibirFoco();
        }
        if (panelSeleccionado instanceof PanelServidor) {
            boolean conectado = ((PanelServidor) panelSeleccionado).conectado();
            activarMenus(conectado, ((PanelServidor) panelSeleccionado).soyLocal);
        }
    }

    public void activarMenus(boolean conectado, boolean local) {
        subMenuTickets.setEnabled(conectado);
        subMenuMensajes.setEnabled(conectado);
        menuMensajeGestores1.setEnabled(conectado && local);
        menuMensajeOperadores.setEnabled(conectado && local);
        subMenuModoServidor.setEnabled(conectado && local && !Configuracion.instanciaUnica().ocultarPasoAutomatico);
        subMenuColas.setEnabled(conectado && local);
        menuGraficos.setEnabled(conectado);
        menuNotificaciones.setEnabled(conectado && local);
        menuPresentes.setEnabled(conectado && local);

    }

    public void cargarIconos() {
        iconosEstado = new ImageIcon[7];
        try {
            for (int i = 0; i < 7; i++) {
                iconosEstado[i] = new ImageIcon(getClass().getResource("/recursos/p" + (i) + ".gif"));
            }
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }

    public ImageIcon getIconoEstado(int n) {
        return iconosEstado[n];
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        tabPanel = new javax.swing.JTabbedPane();
        jMenuBar2 = new javax.swing.JMenuBar();
        jMenu2 = new javax.swing.JMenu();
        subMenuTickets = new javax.swing.JMenu();
        menuPedirTicket1 = new javax.swing.JMenuItem();
        menuPedirTicket2 = new javax.swing.JMenuItem();
        subMenuMensajes = new javax.swing.JMenu();
        menuMensajeGestores1 = new javax.swing.JMenuItem();
        menuMensajeOperadores = new javax.swing.JMenuItem();
        menuMensajeAdministradores = new javax.swing.JMenuItem();
        subMenuModoServidor = new javax.swing.JMenu();
        menuModoAutomatico = new javax.swing.JMenuItem();
        menuModoManual = new javax.swing.JMenuItem();
        subMenuColas = new javax.swing.JMenu();
        menuCerrarColas = new javax.swing.JMenuItem();
        menuAbrirColas = new javax.swing.JMenuItem();
        menuTiempos = new javax.swing.JMenuItem();
        menuContarAcciones = new javax.swing.JMenuItem();
        menuColasVisibles = new javax.swing.JMenuItem();
        menuNotificaciones = new javax.swing.JMenuItem();
        menuPresentes = new javax.swing.JMenuItem();
        menuGraficos = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JSeparator();
        menuSalir = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Administrador ATENEO ");
        setMinimumSize(new java.awt.Dimension(600, 400));

        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));
        getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);

        tabPanel.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                tabPanelStateChanged(evt);
            }
        });
        getContentPane().add(tabPanel, java.awt.BorderLayout.CENTER);

        jMenu2.setText("Utilidades");

        subMenuTickets.setText("Solicitar datos de Tiques");

        menuPedirTicket1.setText("Datos del día");
        menuPedirTicket1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuPedirTicket1ActionPerformed(evt);
            }
        });
        subMenuTickets.add(menuPedirTicket1);

        menuPedirTicket2.setText("Datos de días anteriores");
        menuPedirTicket2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuPedirTicket2ActionPerformed(evt);
            }
        });
        subMenuTickets.add(menuPedirTicket2);

        jMenu2.add(subMenuTickets);

        subMenuMensajes.setText("Envío de mensajes");

        menuMensajeGestores1.setText("Mensaje a Gestores...");
        menuMensajeGestores1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMensajeGestores1ActionPerformed(evt);
            }
        });
        subMenuMensajes.add(menuMensajeGestores1);

        menuMensajeOperadores.setText("Mensaje a TODOS los operadores");
        menuMensajeOperadores.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMensajeOperadoresActionPerformed(evt);
            }
        });
        subMenuMensajes.add(menuMensajeOperadores);

        menuMensajeAdministradores.setText("Mesaje a Administradores");
        menuMensajeAdministradores.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMensajeAdministradoresActionPerformed(evt);
            }
        });
        subMenuMensajes.add(menuMensajeAdministradores);

        jMenu2.add(subMenuMensajes);

        subMenuModoServidor.setText("Cambiar Modo Servidor");

        menuModoAutomatico.setText("Automático");
        menuModoAutomatico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuModoAutomaticoActionPerformed(evt);
            }
        });
        subMenuModoServidor.add(menuModoAutomatico);

        menuModoManual.setText("Manual");
        menuModoManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuModoManualActionPerformed(evt);
            }
        });
        subMenuModoServidor.add(menuModoManual);

        jMenu2.add(subMenuModoServidor);

        subMenuColas.setText("Gestión de colas");

        menuCerrarColas.setText("Cerrar todas las colas");
        menuCerrarColas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuCerrarColasActionPerformed(evt);
            }
        });
        subMenuColas.add(menuCerrarColas);

        menuAbrirColas.setText("Abrir todas las colas");
        menuAbrirColas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuAbrirColasActionPerformed(evt);
            }
        });
        subMenuColas.add(menuAbrirColas);

        menuTiempos.setText("Consultar Tiempos de Alerta...");
        menuTiempos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuTiemposActionPerformed(evt);
            }
        });
        subMenuColas.add(menuTiempos);

        menuContarAcciones.setText("Contador de citas");
        menuContarAcciones.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuContarAccionesActionPerformed(evt);
            }
        });
        subMenuColas.add(menuContarAcciones);

        menuColasVisibles.setText("Colas favoritas");
        menuColasVisibles.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuColasVisiblesActionPerformed(evt);
            }
        });
        subMenuColas.add(menuColasVisibles);

        jMenu2.add(subMenuColas);

        menuNotificaciones.setText("Consulta Resultados Scripts");
        menuNotificaciones.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuNotificacionesActionPerformed(evt);
            }
        });
        jMenu2.add(menuNotificaciones);

        menuPresentes.setText("Fichero Presentes");
        menuPresentes.setEnabled(false);
        menuPresentes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuPresentesActionPerformed(evt);
            }
        });
        jMenu2.add(menuPresentes);

        menuGraficos.setText("Abrir Gráficos");
        menuGraficos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuGraficosActionPerformed(evt);
            }
        });
        jMenu2.add(menuGraficos);
        jMenu2.add(jSeparator1);

        menuSalir.setText("Salir");
        menuSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuSalirActionPerformed(evt);
            }
        });
        jMenu2.add(menuSalir);

        jMenuBar2.add(jMenu2);

        setJMenuBar(jMenuBar2);

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void menuGraficosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuGraficosActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).abrirGraficos();
        }
    }//GEN-LAST:event_menuGraficosActionPerformed

    private void menuColasVisiblesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuColasVisiblesActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).mostrarSeleccionColas();
        }
    }//GEN-LAST:event_menuColasVisiblesActionPerformed

    private void menuContarAccionesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuContarAccionesActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).mostrarContadorCitas();
        }
    }//GEN-LAST:event_menuContarAccionesActionPerformed

    private void menuTiemposActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuTiemposActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).pedirListaTiempos();
        }
    }//GEN-LAST:event_menuTiemposActionPerformed

    private void menuPedirTicket2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPedirTicket2ActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).pedirHistoricoTickets();
        }
    }//GEN-LAST:event_menuPedirTicket2ActionPerformed

    private void menuMensajeOperadoresActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMensajeOperadoresActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).enviarMensajeATodosOperadores();
        }
    }//GEN-LAST:event_menuMensajeOperadoresActionPerformed

    private void menuAbrirColasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuAbrirColasActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).abrirTodasLasColas();
        }
    }//GEN-LAST:event_menuAbrirColasActionPerformed

    private void menuCerrarColasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuCerrarColasActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).cerrarTodasLasColas();
        }
    }//GEN-LAST:event_menuCerrarColasActionPerformed

    private void menuModoManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuModoManualActionPerformed
        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
            ((PanelServidor) panelSeleccionado).pasarModoManual();
        }
    }//GEN-LAST:event_menuModoManualActionPerformed

   private void menuModoAutomaticoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuModoAutomaticoActionPerformed
       if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
           ((PanelServidor) panelSeleccionado).intentarModoAutomatico();
       }
   }//GEN-LAST:event_menuModoAutomaticoActionPerformed

   private void menuMensajeGestores1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMensajeGestores1ActionPerformed
       if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
           ((PanelServidor) panelSeleccionado).enviarMensajeAGestores();
       }
   }//GEN-LAST:event_menuMensajeGestores1ActionPerformed

   private void menuPedirTicket1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPedirTicket1ActionPerformed
       if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
           ((PanelServidor) panelSeleccionado).pedirTicket();
       }
   }//GEN-LAST:event_menuPedirTicket1ActionPerformed

//    private void envioCertificado() {
//        if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
//            ((PanelServidor) panelSeleccionado).comienzaEnvioCertificado();
//        }
//    }

   private void menuSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuSalirActionPerformed
       cerrarTodasLasConexiones();
       this.dispose();
   }//GEN-LAST:event_menuSalirActionPerformed

    private void cerrarTodasLasConexiones() {
        for (int i = 0; i < tabPanel.getTabCount(); i++) {
            PanelBase panel = (PanelBase) tabPanel.getComponent(i);
            panel.cerrar();
        }
    }

   private void tabPanelStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_tabPanelStateChanged
       cambiarPanel();
   }//GEN-LAST:event_tabPanelStateChanged

private void menuMensajeAdministradoresActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMensajeAdministradoresActionPerformed
    if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
        ((PanelServidor) panelSeleccionado).enviarMensajeAAdministradores();
    }

}//GEN-LAST:event_menuMensajeAdministradoresActionPerformed

private void menuNotificacionesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuNotificacionesActionPerformed
    if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
        ((PanelServidor) panelSeleccionado).fichaOtrosDatos();
    }

}//GEN-LAST:event_menuNotificacionesActionPerformed

private void menuPresentesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPresentesActionPerformed
    // TODO add your handling code here:
    if (panelSeleccionado != null && panelSeleccionado instanceof PanelServidor) {
        ((PanelServidor) panelSeleccionado).pedirficheroPresentes();
    }
}//GEN-LAST:event_menuPresentesActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar2;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JMenuItem menuAbrirColas;
    private javax.swing.JMenuItem menuCerrarColas;
    private javax.swing.JMenuItem menuColasVisibles;
    private javax.swing.JMenuItem menuContarAcciones;
    private javax.swing.JMenuItem menuGraficos;
    private javax.swing.JMenuItem menuMensajeAdministradores;
    private javax.swing.JMenuItem menuMensajeGestores1;
    private javax.swing.JMenuItem menuMensajeOperadores;
    private javax.swing.JMenuItem menuModoAutomatico;
    private javax.swing.JMenuItem menuModoManual;
    private javax.swing.JMenuItem menuNotificaciones;
    private javax.swing.JMenuItem menuPedirTicket1;
    private javax.swing.JMenuItem menuPedirTicket2;
    private javax.swing.JMenuItem menuPresentes;
    private javax.swing.JMenuItem menuSalir;
    private javax.swing.JMenuItem menuTiempos;
    private javax.swing.JMenu subMenuColas;
    private javax.swing.JMenu subMenuMensajes;
    private javax.swing.JMenu subMenuModoServidor;
    private javax.swing.JMenu subMenuTickets;
    private javax.swing.JTabbedPane tabPanel;
    // End of variables declaration//GEN-END:variables
}
