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

public class LogGenerico {

   PrintStream salida = null;
   String path;
   String fichero;
   String contenido;
   File file;

   public LogGenerico(String nombreFichero, String contenido) {
      this("logs", nombreFichero, contenido);
   }

   public LogGenerico(String path, String nombreFichero, String contenido) {
      fichero = nombreFichero;
      this.contenido = contenido;
      this.path = path;
      comprobarDirectorio();
      file = new File(path, fichero);     
   }
   
   final void comprobarDirectorio() {
      File dir = new File(".", path);
      dir.mkdir();
   }

   public boolean noExiste() {
      return !file.exists();
   }

   public void escribir(String linea) {
      try {
         salida = new PrintStream(new FileOutputStream(file, true));
         salida.println(linea);
         salida.close();
      } catch (Exception exc) {
      }
   }

   public void abrir() {
      try {
         salida = new PrintStream(new FileOutputStream(file, true));
      } catch (Exception exc) {
      }
   }

   public void escribirRapido(String linea) {
      if (salida != null) {
         salida.println(linea);
      }
   }

   public void cerrar() {
      if (salida != null) {
         salida.close();
      }
   }

   public void aligerar(int maxK, int minK) {
      if (salida != null) {
         return;
      }
      int maximo = maxK * 1024;
      int minimo = minK * 1024;
      if (file.length() < maximo) {
         return;
      }
      try {
         File copia = new File("temporalParaCopia");
         file.renameTo(copia);
         BufferedReader bread = new BufferedReader(new FileReader(copia));
         bread.skip(copia.length() - minimo);
         bread.readLine();
         File nuevo = new File(path, fichero);
         PrintStream rescatado = new PrintStream(new FileOutputStream(nuevo, false));
         String linea = "";
         while( (linea = bread.readLine()) != null) {
            rescatado.println(linea);
         }
         rescatado.close();
         bread.close();
         copia.delete();
      } catch (Exception exc) {
      }
   }
}
