/* 
* 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 java.util.logging.Level;

public class TablaPuestos {

    HashMap<String, Mesa> lista;
    private String listaSalasCalculada = null;

    public TablaPuestos() {
        lista = new HashMap<>();
    }

    public void cargarTabla() {
        try {
            lista.clear();
            Connection conexion = BaseDatos.bd().conexion;
            ResultSet rs;
            Statement stmt = conexion.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery("SELECT puestos.puesto, puestos.capacidades, puestos.exclusivo, SalasAtencion.TextoSalaAtencion AS localizacion FROM puestos LEFT OUTER JOIN SalasAtencion ON puestos.IdSalaAtencion = SalasAtencion.IdSalaAtencion");
            while (rs.next()) {
                Mesa m = new Mesa();
                String key = rs.getString(1);
                if (key != null) {
                    key = trimCeros(key);
                    m.capacidades = rs.getString(2);
                    if (m.capacidades == null) {
                        m.capacidades = "";
                    }
                    m.exclusivo = rs.getBoolean(3);
                    m.localizacion = rs.getString(4);
                    if (m.localizacion == null) {
                        m.localizacion = " ";
                    }
                    lista.put(key, m);
                }
            }
            rs.close();
            stmt.close();
        } catch (Exception exc) {
            servidor.ServidorMain.log.log(Level.WARNING, "TablaPuestos.CargarTabla:{0}", exc.getMessage());
        }
    }

    public void nuevoPuesto(String puesto) {
        if (lista.containsKey(puesto)) {
            return;
        }
        try {
            BaseDatos.bd().SQL("INSERT INTO puestos (puesto, exclusivo, IdSalaAtencion ) values('" + puesto + "',0,-1)");
            Mesa m = new Mesa();
            lista.put(puesto, m);
        } catch (Exception exc) {
            servidor.ServidorMain.log.log(Level.WARNING, "nuevoPuesto: {0}", exc.getMessage());
        }
    }

    public String listaSalasAtencion() {
        if (listaSalasCalculada == null) {
            StringBuilder sb = new StringBuilder("");
            try {
                Connection conexion = BaseDatos.bd().conexion;
                ResultSet rs;
                Statement stmt = conexion.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
                rs = stmt.executeQuery("SELECT * FROM SalasAtencion");
                while (rs.next()) {
                    sb.append(rs.getInt(1)).append('>').append(rs.getString(2)).append('|');
                }
                if (sb.length() > 0) {
                    sb.setLength(sb.length() - 1);
                }
            } catch (Exception exc) {
                String err = exc.getMessage();
            }
            listaSalasCalculada = sb.toString();
        }
        return listaSalasCalculada;
    }

    public String listaPuestos() {
        StringBuilder sb = new StringBuilder("");
        try {
            Connection conexion = BaseDatos.bd().conexion;
            ResultSet rs;
            Statement stmt = conexion.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery("SELECT puesto, idSalaAtencion FROM puestos");
            while (rs.next()) {
                sb.append(rs.getString(1)).append('>').append(rs.getInt(2)).append('|');
            }
            if (sb.length() > 0) {
                sb.setLength(sb.length() - 1);
            }
        } catch (Exception exc) {
        }
        return sb.toString();
    }

    String trimCeros(String s) {
        String s2 = s.trim();
        String s3 = s2.replaceFirst("^0*", "");
        return s3;
    }

    public boolean hayDatos(String mesa) {
        return lista.containsKey(mesa);
    }

    public String getLocalizacion(String mesa) {
        Mesa m = lista.get(mesa);
        if (m == null) {
            return null;
        }
        return m.localizacion;
    }

    public boolean esExclusivo(String mesa) {
        Mesa m = lista.get(mesa);
        if (m == null) {
            return false;
        }
        return m.exclusivo;
    }

    public String capacidades(String mesa) {
        Mesa m = lista.get(mesa);
        if (m == null) {
            return "";
        }
        return m.capacidades.trim();
    }

    class Mesa {

        String capacidades;
        boolean exclusivo;
        String localizacion;
    }

    class Capacidad {

        String capacidades;
    }
}
