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

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

public class InfoServicios {

   public HashMap<String, InfoServicio> servicios = new HashMap<>();
   public HashMap<String, ArrayList<InfoServicio>> listaNombreAlternativos = new HashMap<>();
   private String descMasLarga = "Gestores/Asesores";
   public boolean todosCitaPrevia;
   public boolean hayNombresAlternativos = false;

   public InfoServicios() {
   }

   public InfoServicio nuevo(String cola, String descripcion) {
      InfoServicio serv = new InfoServicio(cola);
      serv.setDescripcion(descripcion, 0);
      servicios.put(cola, serv);
      return serv;
   }

   public InfoServicio get(String cola) {
      return servicios.get(cola);
   }

   public void completar() {
      cargarBotonesalternativos();
      TablaColas colas = TablaColas.getTablaColas();
      Configuracion conf = Configuracion.instanciaUnica();
      ArrayList<String> visibles = comprobarListaVisibles();
      todosCitaPrevia = true;

       for (RegistroCola regCola : colas) {
           String cola = regCola.cola;
           if (!regCola.activa) {
               continue;
           }           
           if (!regCola.citaPrevia) {
               todosCitaPrevia = false;
           }
           String descripcion = regCola.descripcion;
           if (conf.nombresColas.containsKey(cola)) {
               descripcion = conf.nombresColas.get(cola);
           }
           InfoServicio infoser = nuevo(cola, descripcion);
           if(visibles != null && !visibles.contains(cola)) {
               infoser.visible = false;
           }
       }
      cargarIdiomasAlternativos();
   }

   ArrayList<String> comprobarListaVisibles() {
      if(Configuracion.instanciaUnica().serviciosVisibles == null) {
         return null;
      }
      ArrayList<String> nueva = new ArrayList<>();
      TablaColas colas = TablaColas.getTablaColas();
      for(String cola : Configuracion.instanciaUnica().serviciosVisibles) {
         if(cola.startsWith("#H")) {
            nueva.add(cola);
         } else {
            RegistroCola reg = colas.buscar(cola);
            if(reg != null && reg.activa) {
               nueva.add(cola);
            }
         }
      }
      Configuracion.instanciaUnica().serviciosVisibles = nueva;
      return nueva;
   }
   
   public boolean noHayVisibles() {
      for(InfoServicio inf : servicios.values()) {
         if(inf.visible) return false;
      }
      return true;
   }
   
   public String getDescripcionLarga(int idioma) {
      int maxLargo = descMasLarga.length();
      for(InfoServicio info : servicios.values()) {
         String descLarga = info.descLarga[idioma];
         if (descLarga.length() > maxLargo) {
            maxLargo = descLarga.length();
            descMasLarga = descLarga;
         }
      }
      return descMasLarga;
   }

   void cargarIdiomasAlternativos() {
      GestorIdiomas gi = Global.gestorIdiomas;
      if (gi.numeroIdiomas < 2) {
         return;
      }
      for (int idioma = 1; idioma < gi.numeroIdiomas; idioma++) {
         gestor.utiles.TraduccionColas tc = new gestor.utiles.TraduccionColas(idioma);
         for(InfoServicio info : servicios.values()) {
            info.setDescripcion(tc.descripcion(info.nombre), idioma);
         }
      }
   }

   public boolean ExisteColaDeCitaPrevia() {
      TablaColas colas = TablaColas.getTablaColas();
      for (String cola : servicios.keySet()) {
            RegistroCola reg = colas.buscar(cola);
         if (reg != null && reg.citaPrevia && reg.activa) {
            return true;
         }
      }
      return false;
   }

   void cargarBotonesalternativos() {
      BufferedReader bf = null;
      try {
         File origen = new File(Global.gestorIdiomas.rutaIdiomaPrincipal + "nombresAlternativos.txt");
         if (!origen.exists()) {
            return;
         }
         hayNombresAlternativos = true;
         bf = new BufferedReader(new FileReader(origen));
         String linea;
         while ((linea = bf.readLine()) != null) {
            linea = linea.trim();
            String[] ps = Global.split(linea, '=');
            String cola = ps[0].trim().toUpperCase();
            if (!listaNombreAlternativos.containsKey(cola)) {
               listaNombreAlternativos.put(cola, new ArrayList<>());
            }
            ArrayList<InfoServicio> miembros = listaNombreAlternativos.get(cola);
            String nombreCola = cola + (miembros.size() + 1);
            InfoServicio inser = new InfoServicio(cola);
            inser.setDescripcion(ps[1], 0);
            inser.nombre = nombreCola;
            inser.esNombreAlternativo = true;
            miembros.add(inser);
            servicios.put(nombreCola, inser);
         }
         bf.close();
      } catch (Exception ex) {
      }
   }
}
