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

import gestor.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;

public class Global {

   public static Main mainForm;
   public static PanelTactil panel = null;
   public static AlmacenStrings trad;
   public static GeneradorAyuda generadorAyuda;
   public static GestorIdiomas gestorIdiomas;
   public static boolean comprobarImpresora = false;
   static Pattern regexp1 = Pattern.compile("<.*?>");
   static Pattern regexp2 = Pattern.compile("\\s{2,}");

   // por si algun dia ponemos introduccion de NIF
   // private static ValidaNif valNif = new ValidaNif();
   public Global() {
   }

   public static String[] split(String s, char sep) {
      java.util.ArrayList<String> array = new java.util.ArrayList<>();
      int comi = 0;
      for (int i = 0; i < s.length(); i++) {
         if (s.charAt(i) == sep) {
            array.add(s.substring(comi, i));
            comi = i + 1;
         }
      }
      if (comi < s.length()) {
         array.add(s.substring(comi));
      }

      String[] res = new String[array.size()];
      return array.toArray(res);
   }

   public static int nz(String s) {
      if (s == null) {
         return 0;
      }
      try {
         return Integer.parseInt(s);
      } catch (Exception exc) {
         return 0;
      }
   }

   public static void sleep(int miliseg) {
      Thread.interrupted();
      try {
         Thread.sleep(miliseg);
      } catch (Exception exc) {
      }
   }

   public static java.sql.Timestamp calcularHora(int r, java.sql.Timestamp horaCita, long ahoraMismo) {
      switch (r) {
         case 0:
            return horaCita;
         case 1:
            return new java.sql.Timestamp(ahoraMismo);
         case 2:
            return new java.sql.Timestamp(ahoraMismo + Configuracion.instanciaUnica().margenPenalizacion);
      }
      return null;
   }

   public static int compruebaHoraCalculada(long ahora, long cita) {
      if (cita > ahora) {
         return 0;
      }
      if ((cita + 300000) > ahora) {
         return 1;
      }
      cita += Configuracion.instanciaUnica().margenRetraso;
      if (cita > ahora) {
         return 2;
      }
      return 3;
   }

   public static String limpiaHtml(String s) {
      String temp = regexp1.matcher(s).replaceAll(" ");
      temp = regexp2.matcher(temp).replaceAll(" ");
      return temp.trim();
   }

   public static void borrarLogsAntiguos(String path, final String raiz, int numDias) {
      try {
         File dirLogs = new File(path);
         File[] logs = dirLogs.listFiles((File dir, String name) -> name.startsWith(raiz));
         if (logs == null || logs.length == 0) {
            return;
         }
         GregorianCalendar gc = new GregorianCalendar();
         gc.add(Calendar.DAY_OF_YEAR, -numDias);
         for (File f : logs) {
            if (f.lastModified() < gc.getTimeInMillis()) {
               f.delete();
            }
         }
      } catch (Exception exc) {
      }
   }

   public static String imagenEnHtml(String archivoImagen, String texto, boolean izquierda, int alto, int ancho) {
      StringBuilder sb = new StringBuilder();
      sb.append("<html>");
      if (texto != null && !texto.equals("") && izquierda) {
         sb.append(texto);
      }
      sb.append("<img src=").append('"');
      sb.append(Main.class.getResource(archivoImagen));
      sb.append('"');
      if (alto != 0) {
         sb.append(" width=").append('"').append(ancho).append('"');
         sb.append(" height=").append('"').append(alto).append('"');
      }
      sb.append("/>");
      if (texto != null && !texto.equals("") && !izquierda) {
         sb.append(texto);
      }
      sb.append("</html>");
      return sb.toString();
   }

   public static String imagenEnHtml(String archivoImagen, String texto, boolean izquierda) {
      return imagenEnHtml(archivoImagen, texto, izquierda, 0, 0);
   }

   public static String imagenEnHtml(String archivoImagen) {
      return imagenEnHtml(archivoImagen, null, false, 0, 0);
   }

   public static String btos(boolean v) {
      if (v) {
         return "1";
      }
      return "0";
   }

   public static boolean stob(String s) {
      s = s.toUpperCase();
      return s.equals("1") || s.equals("S");
   }

   public static int versionSO() {
      try {
         String versionWindows = System.getProperty("os.version").toLowerCase();
         int ver = Double.valueOf(versionWindows).intValue();
         return ver;
      } catch (Exception exc) {
         return 0;
      }
   }

}
