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

import java.util.logging.Level;
import servidor.clientes.Cliente;
import servidor.ServidorMain;

public class MensajeInterno extends Mensaje {

    public static final int MSG_ENVIA_CONTRIBUYENTE_A_MESA = 501;
    public static final int MSG_ENVIA_REGISTRO_A_ADMINISTRADORES = 502;
    public static final int MSG_CIERRE_CLIENTE = 503;
    public static final int MSG_REFRESCA_TABLAPUESTOS = 504;
    public static final int MSG_CAMBIO_TURNO = 505;
    public static final int MSG_EJECUTA_TEST = 506;
    public static final int MSG_EJECUTA_TIMER_METRONOMO = 507;
    public static final int MSG_REFRESCA_TABLAS = 508;
    public static final int MSG_ACTUALIZAR_CONMUTADORES = 512;
    public static final int MSG_MATAR_OPERADORES = 514;
    public static final int MSG_MATAR_OPERADOR = 515;
    public static final int MSG_RECONECTAR_BD = 516;
    public static final int MSG_MATAR_ADMINISTRADOR = 517;
    public static final int MSG_MATAR_MONITORES = 518;
    public static final int MSG_SALVAR_DATOS = 519;
    public static final int MSG_HUECOS_CADUCADOS = 520;
    public static final int MSG_DESPIERTA = 522;
    public static final int MSG_CIERRE_INCONDICIONAL = 599;
    public Cliente clienteTratado = null;

    public MensajeInterno(String str, org.quickserver.net.server.ClientHandler handler) {
        super(str, handler);
        marcaTiempo = new java.util.Date();
    }

    public MensajeInterno(int codigo, String str) {
        handler = null;
        this.codigo = codigo;
        textoMensaje = codigo + str;
        marcaTiempo = new java.util.Date();
        if (str != null) {
            params = servidor.utiles.Global.split(str, '|');
        }
        ok = true;
    }

    @Override
    public void procesar() {
        try {
            switch (codigo) {
                case MSG_CAMBIO_TURNO:
                    GestorColas.getGestor().cambioDeTurno(params[0]);
                    break;
                case MSG_ENVIA_CONTRIBUYENTE_A_MESA:
                    GestorColas.getGestor().enviaPresenteAMesa();
                    break;
                case MSG_CIERRE_CLIENTE:
                    if (clienteTratado != null) {
                        clienteTratado.cerrarConexion();
                    }
                    break;
                case MSG_REFRESCA_TABLAS:
                    GestorColas.getGestor().releerTablas();
                    break;
                case MSG_REFRESCA_TABLAPUESTOS:
                    servidor.utiles.Global.tablaPuestos.cargarTabla();
                    System.out.println("Recargada tabla de asignacion de capacidades a MESAS");
                    break;
                case MSG_CIERRE_INCONDICIONAL:
                    cierreIncondicional();
                    break;
                case MSG_EJECUTA_TEST:
                    servidor.utiles.Global.main.test(params);
                    break;
                case MSG_ACTUALIZAR_CONMUTADORES:
                    servidor.Configuracion.getConfiguracion().cargarValoresEnCaliente(true);
                    break;
                case MSG_EJECUTA_TIMER_METRONOMO:
                    servidor.utiles.Global.main.metronomo.tickMetronomo();
                    break;
                case MSG_MATAR_OPERADORES:
                    GestorColas.getGestor().operadores.apagarOperadores(params[0]);
                    break;
                case MSG_MATAR_OPERADOR:
                    GestorColas.getGestor().operadores.apagarOperador(params[0]);
                    break;
                case MSG_MATAR_ADMINISTRADOR:
                    GestorColas.getGestor().administradores.apagarAdministrador(params[0]);
                    break;
                case MSG_MATAR_MONITORES:
                    GestorColas.getGestor().apagarMonitores();
                    break;
                case MSG_RECONECTAR_BD:
                    servidor.datos.BaseDatos.bd().procesoRecuperacion();
                    break;
                case MSG_SALVAR_DATOS:
                    GestorColas.getGestor().salvarDatos(params[0]);
                    break;
                case MSG_HUECOS_CADUCADOS:
                    GestorColas.getGestor().tablaHuecos.borarCaducados();
                    break;
                case MSG_DESPIERTA:
                    GestorColas.getGestor().despierta();
                    break;

            }
        } catch (Exception exc) {
            ServidorMain.log.log(Level.WARNING, "Error procesando mensaje interno:\n{0}\n{1}", new Object[]{this.toString(), exc.getMessage()});
        }
    }

    public void cierreIncondicional() {
        if (params.length > 0 && params[0].equalsIgnoreCase("cierreIncondicional")) {
            servidor.utiles.Global.main.cerrarAplicacion();
        }
    }
}
