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

import java.io.*;
import java.util.*;
import java.util.logging.Level;
import servidor.*;

public class Global {

    public static boolean modoAutomatico = false;
    public static int numMonitoresNecesarios = 0;
    private static final java.text.NumberFormat nf;
    public static ServidorMain main;
    public static servidor.datos.TablaPuestos tablaPuestos;

    public static boolean modoDepuracion = true;
    public static String passwordServidorSql = "";
    public static int registrosRecibidosDIT = 0;
    public static String idServidor;

    static {
        nf = java.text.NumberFormat.getInstance();
        nf.setGroupingUsed(false);
        nf.setMinimumIntegerDigits(3);

    }

    public synchronized 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 String formateaCodigo(int codigo) {
        return nf.format(codigo);
    }

    public static void sleep(int miliseg) {
        try {
            Thread.interrupted();
            Thread.sleep(miliseg);
        } catch (Exception exc) {
            ServidorMain.log.log(Level.WARNING, "Se interrumpio sleep({0}):{1}", new Object[]{miliseg, exc.getMessage()});
        }
    }

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

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

    public static void mensajeDep(String s) {
        if (modoDepuracion) {
            System.out.println(s);
        }
    }

    public static String preparaCodigoScript(String fichero) {
        String bufer = "";
        try {
            File file = new File(fichero);
            if (!file.exists()) {
                System.err.println(fichero + " no encontrado");
                return null;
            }
            BufferedReader bf = new BufferedReader(new FileReader(file));
            String s;
            while ((s = bf.readLine()) != null) {
                bufer += s + "#";
            }
            bf.close();
            return bufer.replaceAll("\\|", "·");
        } catch (Exception exc) {
            return null;
        }
    }

    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 StringFromChars(char c, int n) {
        char[] array = new char[n];
        Arrays.fill(array, c);
        return new String(array);
    }

    public static String espacios(int n) {
        return StringFromChars(' ', n);
    }

    public static String ajustarIzq(String s, int n) {
        if (s.length() >= n) {
            return s;
        }
        return espacios(n - s.length()) + s;
    }

    public static String ajustarDer(String s, int n) {
        if (s.length() >= n) {
            return s;
        }
        return s + espacios(n - s.length());
    }

    public static String left(String s, int n) {
        if (s.length() <= n) {
            return s;
        }
        return s.substring(0, n);
    }

    public static String right(String s, int n) {
        if (s.length() <= n) {
            return s;
        }
        return s.substring(s.length() - n);
    }

    private static void msjCond(boolean rojo, Object... vars) {
        if (Configuracion.getConfiguracion().modoVerboso) {
            StringBuilder sb = new StringBuilder();
            for (Object var : vars) {
                sb.append(var.toString());
            }
            if (rojo) {
                System.err.println(sb.toString());
            } else {
                System.out.println(sb.toString());
            }
        }
    }

    public static void msjCondNormal(Object... vars) {
        Global.msjCond(false, vars);
    }

    public static void msjCondRojo(Object... vars) {
        Global.msjCond(true, vars);
    }

   public static String leerFichero(String ruta) {
      try {
         StringBuilder sb  = new StringBuilder(1000);
         BufferedReader bf = new BufferedReader(new FileReader(ruta));
         String linea;
         while( (linea = bf.readLine()) != null) {
             sb.append(linea).append('\r');
         }
         bf.close();
         return sb.toString();
      } catch(Exception exc) {
         return null;
      }
      
   }
   
   public static void guardarFichero(String ruta, String contenido) {
      try {
         BufferedWriter bf = new BufferedWriter(new FileWriter(ruta));
         bf.write(contenido, 0,  contenido.length());
         bf.close();
      } catch(Exception exc) {}
   }
    
}
