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

import administrador.utiles.*;
import java.sql.Timestamp;
import java.util.*;

public class TablaHuecos {

    public ArrayList<Registro> datos;
    HashMap<String, String> rangos;
    String miRangoHuecos;

    public TablaHuecos() {
        datos = new ArrayList<>();
        rangos = new HashMap<>();
        miRangoHuecos = "";
    }

    public void actualualizaRangoHuecos(String rangonuevo) {
        if (miRangoHuecos.equalsIgnoreCase(rangonuevo)) {
            return;
        }
        miRangoHuecos = rangonuevo;
        cargarRangoHuecos(rangonuevo);
    }

    public void cargarRangoHuecos(String listarango) {

        if (rangos == null) {
            rangos = new HashMap<>();
        }
        rangos.clear();
        String[] lineas = Global.split(listarango, '|');
        for (String linea : lineas) {
            String[] campos = Global.split(linea, '=');
            if (campos.length == 2) {
                rangos.put(campos[0], campos[1]);
            }
        }
    }

    public String buscarRangoHuecos(String cola) {
        if (rangos.containsKey(cola)) {
            return rangos.get(cola);
        }
        return cola;
    }

    public String buscarRangoHuecos2(String cola) {
        if (rangos.containsKey(cola)) {
            return rangos.get(cola);
        }
        return " ";
    }

    public void vaciar() {
        datos.clear();
    }

    public void incorporarCitas(String s) {
        try {
            Calendar cal = new GregorianCalendar();
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            long lasSeis = cal.getTimeInMillis();

            datos.clear();
            for (int i = 0; i < s.length(); i += 6) {

                String sm = s.substring(i, i + 4);
                long delta = Long.parseLong(sm) * 60000L;
                Timestamp hora = new Timestamp(lasSeis + delta);
                String sn = s.substring(i + 4, i + 6);
                int numero = Integer.parseInt(sn);
                nuevaCita(hora, numero);
            }
        } catch (Exception ex) {
        }
    }

    public void nuevaCita(Timestamp hora, int numero) {
        Registro r = new Registro();
        r.horaCita = hora;
        r.numero = numero;
        datos.add(r);
    }

    public void borrarOcupables() {
        for (Registro r : datos) {
            r.porOcupar = 0;
        }
    }

    public int disponibles() {
        int total = 0;
        for (Registro r : datos) {
            total += r.numero;
        }
        return total;
    }

    public int disponibles(int[] seleccionadas) {
        int total = 0;
        for (int i = 0; i < seleccionadas.length; i++) {
            Registro r = datos.get(seleccionadas[i]);
            total += r.numero;
        }
        return total;
    }

    public void ocupar(int[] seleccionadas) {
        for (int i = 0; i < seleccionadas.length; i++) {
            Registro r = datos.get(seleccionadas[i]);
            r.porOcupar = r.numero;
        }
    }

    public class Registro {

        public Timestamp horaCita;
        public int numero;
        public int porOcupar;

        @Override
        public String toString() {
            return Fecha.formatoHoraHM(horaCita) + "  " + numero;
        }
    }
}
