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

import gestor.utiles.*;
import java.util.*;

public class TablaPuestos {

   HashMap<String, String> salas;
   ArrayList<Puesto> puestos;
   private static TablaPuestos yo = null;

   public static TablaPuestos getTablaPuestos() {
      if (yo == null) {
         yo = new TablaPuestos();
      }
      return yo;
   }

   public int numPuestos() {
      return puestos.size();
   }

   public Puesto puesto(int n) {
      return puestos.get(n);
   }

   public void nuevoPuesto(String nombre) {
      if(buscarPuesto(nombre) == null) {
         Puesto p = new Puesto(nombre, "");
         puestos.add(p);
         ordenarPuestos();
      }
   }

   public TablaPuestos() {
      salas = new HashMap<>();
      puestos = new ArrayList<>();
   }

   public void cargarSalas(String lista) {
      String[] ls = Global.split(lista, '|');
      for (String l : ls) {
         String[] pp = Global.split(l, '>');
         salas.put(pp[0], pp[1]);
      }
   }

   public Puesto buscarPuesto(String n) {
      for(Puesto p : puestos) {
         if(p.nombre.equals(n)) {
            return p;
         }
      }
      return null;
   }
   public void cargarPuestos(String lista) {
      String[] ls = Global.split(lista, '|');
      for (String l : ls) {
         String[] pp = Global.split(l, '>');
         Puesto p = buscarPuesto(pp[0]);
         if(p == null) {
            Puesto np = new Puesto(pp[0], pp[1]);
            puestos.add(np);
         } else {
            p.idSala = pp[1];
         }
      }
      ordenarPuestos();
   }

   void ordenarPuestos() {
      Collections.sort(puestos);
   }

   public String nombreSala(String id) {
      return salas.get(id);
   }

   public class Puesto implements Comparable<Puesto> {
      public String nombre;
      public String idSala;
      private final int numero;
      public Puesto(String n, String id) {
         nombre = n;
         idSala = id;
         numero = Integer.parseInt(n);
      }
      @Override
      public int compareTo(Puesto o) {
         return numero - o.numero;
      }
   }
}
