/* 
* 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.utiles.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.ImageIcon;

public class GestorIdiomas {

   public boolean idiomaPrincipalUsaCarpeta = false;
   public String rutaIdiomaPrincipal = "";
   public String[] idiomas;
   public int numeroIdiomas = 1;
   private int idiomaActual = 0;
   AlmacenStrings[] traductores;
   private ImageIcon[] rotulos;
   public ImageIcon[] banderas;
   public Font[] fuentes;
   GeneradorAyuda[] ayudas;
   ArrayList[] submenus;

   public GestorIdiomas() {
   }

   void crearRotulos(javax.swing.JLabel label) {
      rotulos = new ImageIcon[numeroIdiomas];
      for (int i = 0; i < numeroIdiomas; i++) {
         String texto = traductores[i].valor("titulo");
         rotulos[i] = new ImageIcon(GeneradorRotulo.generaRotulo(texto, label));
      }
   }

   ImageIcon rotuloActual() {
      return rotulos[idiomaActual];
   }

   public void cambiarIdioma(int idioma) {
      idiomaActual = idioma;
      Global.trad = traductores[idiomaActual];
      Global.generadorAyuda = ayudas[idiomaActual];
   }

   public int idiomaActivo() {
      return idiomaActual;
   }

   public AlmacenStrings traduccionActual() {
      return traductores[idiomaActual];
   }

   public String idiomaMasLargo() {
      String s = "";
      if (idiomas != null) {
         for (int i = 0; i < idiomas.length; i++) {
            if (idiomas[i].length() > s.length()) {
               s = idiomas[i];
            }
         }
      }
      return s;
   }

   public void cargarIdiomas(String str) {
      String[] idiomasIni = gestor.utiles.Global.split(str, ',');
      if (idiomasIni.length > 1) {
         numeroIdiomas = idiomasIni.length;
         idiomas = new String[numeroIdiomas];
         for (int i = 0; i < numeroIdiomas; i++) {
            idiomas[i] = idiomasIni[i].trim();
         }
         File idiomaPorDefecto = new File(idiomas[0]);
         if (idiomaPorDefecto.exists() && idiomaPorDefecto.isDirectory()) {
            idiomaPrincipalUsaCarpeta = true;
            rutaIdiomaPrincipal = idiomas[0] + "\\";
         }
      }
      traductores = new AlmacenStrings[numeroIdiomas];
      ayudas = new GeneradorAyuda[numeroIdiomas];
      fuentes = new Font[numeroIdiomas];
      if (numeroIdiomas > 1) {
         cargarBanderas();
      }
   }

   public void cargarTraducciones() {
      traductores[0] = Global.trad;
      Global.trad.cargar(rutaIdiomaPrincipal + "traduccion.txt");
      for (int i = 1; i < numeroIdiomas; i++) {
         TraductorSecundario trad = new TraductorSecundario(Global.trad);
         trad.cargar(idiomas[i] + "\\traduccion.txt");
         traductores[i] = trad;
      }
   }

   public void cargarAyudas(InfoServicios infoServicios) {
      Global.generadorAyuda = new GeneradorAyuda(infoServicios);
      String rutaAyuda;
      if (idiomaPrincipalUsaCarpeta) {
         rutaAyuda = idiomas[0] + "\\Ayuda.xml";
      } else {
         rutaAyuda = "ayuda\\Ayuda.xml";
      }
      if (!Global.generadorAyuda.generar(rutaAyuda)) {
         Global.generadorAyuda = null;
      }
      ayudas[0] = Global.generadorAyuda;
      for (int i = 1; i < numeroIdiomas; i++) {
         idiomaActual = i;
         GeneradorAyuda gen = new GeneradorAyuda(infoServicios);
         if (!gen.generar(idiomas[i] + "\\ayuda.xml")) {
            gen = null;
         }
         ayudas[i] = gen;
      }
      idiomaActual = 0;
   }

   public void cargarBanderas() {
      banderas = new ImageIcon[numeroIdiomas];
      File bandera = new File(rutaIdiomaPrincipal + "bandera.gif");
      if (!bandera.exists()) {
         bandera = new File(rutaIdiomaPrincipal + idiomas[0] + ".gif");
      }
      if (bandera.exists()) {
         banderas[0] = new javax.swing.ImageIcon(bandera.getAbsolutePath());
      } else {
         banderas[0] = null;
      }
      for (int i = 1; i < numeroIdiomas; i++) {
         bandera = new File(idiomas[i] + "\\bandera.gif");
         if (!bandera.exists()) {
            bandera = new File(idiomas[i] + "\\" + idiomas[i] + ".gif");
            if (!bandera.exists()) {
               banderas[i] = null;
               continue;
            }
         }
         banderas[i] = new javax.swing.ImageIcon(bandera.getAbsolutePath());
      }
   }

   public void cargarTraduccionMenus() {
      submenus = new ArrayList[numeroIdiomas];
      for (int i = 1; i < numeroIdiomas; i++) {
         try {
            ArrayList<String> submenu = new ArrayList<String>();
            BufferedReader bf = new BufferedReader(new FileReader(idiomas[i] + "\\submenus.ini"));
            String linea;
            while ((linea = bf.readLine()) != null) {
               linea = linea.trim();
               submenu.add(linea);
            }
            submenus[i] = submenu;
         } catch (Exception ex) {
         }
      }
   }
}
