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

public class MemTablaCandidatos extends MemTabla {

   public MemTablaCandidatos() {
   }

   @Override
   public int cargar(String sql) {
      int n = super.cargar(sql);
      preparaStmt();
      return n;
   }

   @Override
   public int recargar() {
      int n = super.recargar();
      return n;
   }

   @Override
   public void borrarTabla() {
      filas.clear();
   }

   @Override
   public void preparaStmt() {
      updateStmt = new SentenciaSQL("UPDATE candidatos SET " +
           "nif=?, nombre=?, horacita=?, estado=?, horacalculada=?, horaAtendido=?, horapresente=?, horaCalculada2=?, turno=?, " +
           "citamultiple=?, numeroticket=?, cola=?, operador=?, horaFinalizado=?, CodigoEstadistico=?, citaVinculada=?, codigoGestor=?," +
           "NIU=?, mesa=?, horaPresente2=?, NombreCola=?, GHuecos=?, DNIe=?, Centro = ? " +
           "WHERE Id=? ");
      
      insertStmt = new SentenciaSQL("INSERT INTO candidatos " +
        "(nif, nombre, horacita, estado, horacalculada, horaAtendido, horapresente, horaCalculada2, turno, " +
        "citamultiple, numeroticket, cola, operador, horaFinalizado, CodigoEstadistico, citaVinculada, codigoGestor, " +
        "NIU, mesa, horaPresente2,NombreCola, GHuecos, DNIe, Centro) " +
        "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

      deleteStmt  =new SentenciaSQL("DELETE FROM candidatos WHERE Id=?");
   }

   @Override
   public void update(MemRegistro reg) {
      RegistroCandidatos r = (RegistroCandidatos) reg;
      updateStmt.setString(1, r.getNif());
      updateStmt.setString(2, r.getNombre());
      updateStmt.setTimestamp(3, r.getHoraCita());
      updateStmt.setString(4, r.getEstado());
      updateStmt.setTimestamp(5, r.getHoraCalculada());
      updateStmt.setTimestamp(6, r.getHoraAtendido());
      updateStmt.setTimestamp(7, r.getHoraPresente());
      updateStmt.setTimestamp(8, r.getHoraCalculada2());
      updateStmt.setString(9, r.getTurno());
      updateStmt.setInt(10, r.getCitaMultiple());
      updateStmt.setString(11, r.getNumeroTicket());
      updateStmt.setString(12, r.getCola());
      updateStmt.setString(13, r.getOperador());
      updateStmt.setTimestamp(14, r.getHoraFinalizado());
      updateStmt.setString(15, r.getCodigoEstadistico());
      updateStmt.setString(16, r.getCitaVinculada());
      updateStmt.setString(17, r.getCodigoGestor());
      updateStmt.setString(18, r.getNiu());
      updateStmt.setString(19, r.getMesa());
      updateStmt.setTimestamp(20, r.getHoraPresente2());
      updateStmt.setString(21, r.getNombreCola());
      updateStmt.setBoolean(22, r.isGestionHuecos());
      updateStmt.setBoolean(23, r.isDNIe());
      updateStmt.setString(24, r.getCentro());
      updateStmt.setInt(25, r.getId());
      updateStmt.executeUpdate();
   }

   @Override
   public void insert(MemRegistro reg) {
      insert(reg, true);
   }

   public void insert(MemRegistro reg, boolean aMemoria) {
      RegistroCandidatos r = (RegistroCandidatos) reg;
      insertStmt.setString(1, r.getNif());
      insertStmt.setString(2, r.getNombre());
      insertStmt.setTimestamp(3, r.getHoraCita());
      insertStmt.setString(4, r.getEstado());
      insertStmt.setTimestamp(5, r.getHoraCalculada());
      insertStmt.setTimestamp(6, r.getHoraAtendido());
      insertStmt.setTimestamp(7, r.getHoraPresente());
      insertStmt.setTimestamp(8, r.getHoraCalculada2());
      insertStmt.setString(9, r.getTurno());
      insertStmt.setInt(10, r.getCitaMultiple());
      insertStmt.setString(11, r.getNumeroTicket());
      insertStmt.setString(12, r.getCola());
      insertStmt.setString(13, r.getOperador());
      insertStmt.setTimestamp(14, r.getHoraFinalizado());
      insertStmt.setString(15, r.getCodigoEstadistico());
      insertStmt.setString(16, r.getCitaVinculada());
      insertStmt.setString(17, r.getCodigoGestor());
      insertStmt.setString(18, r.getNiu());
      insertStmt.setString(19, r.getMesa());
      insertStmt.setTimestamp(20, r.getHoraPresente2());
      insertStmt.setString(21, r.getNombreCola());
      insertStmt.setBoolean(22, r.isGestionHuecos());
      insertStmt.setBoolean(23, r.isDNIe());
      insertStmt.setString(24, r.getCentro());
      insertStmt.executeUpdate();
      if(aMemoria) {
         r.setId(autoNumericoObtenido());
         // POR ULTIMO, lo añadimos a la coleccion. Si hubiera excepcion en el INSERT no debería llegar aqui.
         filas.add(reg);
      }
   }

   @Override
   public void delete(MemRegistro reg) {
      RegistroCandidatos r = (RegistroCandidatos) reg;
      filas.remove(reg);
      deleteStmt.setInt(1, r.getId());
      deleteStmt.executeUpdate();
   }

   @Override
   public MemRegistro nuevoRegistro() {
      return new RegistroCandidatos();
   }

   public RegistroCandidatos registro(int n) {
      return (RegistroCandidatos) filas.get(n);
   }

   public RegistroCandidatos buscarNombre(String nombre) {
       for (MemRegistro fila : filas) {
           RegistroCandidatos reg = (RegistroCandidatos) fila;
           if (reg.getNombre().equalsIgnoreCase(nombre)) {
               return reg;
           }
       }
      return null;
   }

   public RegistroCandidatos buscarId(int Id) {
       for (MemRegistro fila : filas) {
           RegistroCandidatos reg = (RegistroCandidatos) fila;
           if (reg.getId() == Id) {
               return reg;
           }
       }
      return null;
   }
   
   @Override
   int calcularUltimoNumero() {
      if(filas.size() < 1) return (++semillaAutoIncremento);
      RegistroCandidatos reg = (RegistroCandidatos) filas.get(filas.size() - 1);
      return reg.getId() + 1;
   }
}
