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

import java.sql.*;
import java.util.*;
import servidor.*;
import servidor.comunicaciones.*;

/**
 *
 * @author admf11600q4
 */
public class TablaMensajesGestores {

    PreparedStatement stmtInsert;
    PreparedStatement stmtLimpiar;
    String sql = "INSERT INTO mensajesGestores "
            + "(hora, codigo, mensaje, gestor) "
            + "values(?,?,?,?)";
    String sqlLimpiar = "DELETE FROM mensajesGestores WHERE hora < ?";
    int cuentaErrores = 0;

    public TablaMensajesGestores() {
        try {
            stmtInsert = BaseDatos.bd().conexion.prepareStatement(sql);
            stmtLimpiar = BaseDatos.bd().conexion.prepareStatement(sqlLimpiar);
        } catch (Exception exc) {
            stmtInsert = null;
        }
    }

    public void insertar(MensajeGestor msj) {
        if (stmtInsert == null) {
            return;
        }
        try {
            String gestor = GestorColas.getGestor().gestores.buscarCodigoGestor(Integer.parseInt(msj.getNumeroGestor()));
            stmtInsert.setTimestamp(1, servidor.utiles.Fecha.ahora());
            stmtInsert.setInt(2, msj.getCodigo());
            stmtInsert.setString(3, msj.mensaje());
            stmtInsert.setString(4, gestor);
            stmtInsert.executeUpdate();
        } catch (Exception exc) {
            if (cuentaErrores < 5) {
                ServidorMain.logException("No se ha podido grabar el mensaje del gestor", exc);
            } else {
                stmtInsert = null;
            }
            cuentaErrores++;
        }
    }

    public void limpiar() {
        try {
            GregorianCalendar gc = new GregorianCalendar();
            gc.set(Calendar.HOUR, 0);
            gc.add(Calendar.DAY_OF_YEAR, -10);
            stmtLimpiar.setTimestamp(1, new Timestamp(gc.getTimeInMillis()));
            stmtLimpiar.executeUpdate();
        } catch (Exception exc) {
        }
    }
}
