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

import java.io.*;
import java.util.*;

public class GeneradorHtml {

   StringBuffer sb = new StringBuffer();
   Stack<String> pila = new Stack<>();
   String bodyScript = "";
   boolean creado = true;

   public void inicia() {
      sb = new StringBuffer(100);
   }

   public GeneradorHtml add(String s) {
      sb.append(s).append("<br>");
      return this;
   }

   public GeneradorHtml insert(String s) {
      sb.append(s);
      return this;
   }

   public GeneradorHtml abrirTag(String tag) {
      sb.append("<").append(tag).append(">");
      pila.push(tag);
      return this;
   }

   public GeneradorHtml abrirTag(String tag, String contenido) {
      sb.append("<").append(tag).append(" ").append(contenido).append(">");
      pila.push(tag);
      return this;
   }

   public GeneradorHtml cerrarTag() {
      sb.append("</").append(pila.pop()).append(">");
      return this;
   }

   public GeneradorHtml insertTag(String tag, String contenido) {
      sb.append("<").append(tag).append(">").append(contenido).append("</").append(tag).append(">");
      return this;
   }

   public GeneradorHtml insertTag(String tag, String contenidoTag, String contenido) {
      sb.append("<").append(tag).append(" ").append(contenidoTag).append(">").append(contenido).append("</").append(tag).append(">");
      return this;
   }

   public GeneradorHtml nl() {
      sb.append("<br>");
      return this;
   }

   public GeneradorHtml insertBodyScript(String script) {
      bodyScript += script;
      return this;
   }

   public GeneradorHtml cargarHtml(InputStream is) {
      try {
         String tmp = "";
         int leidos = 0;
         byte[] buf = new byte[is.available()];
         while ((leidos = is.read(buf)) > 0) {
            tmp += new String(buf);
         }
         tmp = tmp.replaceFirst("(</body>|</BODY>)[\\s]*(</html>|</HTML>)[\\s]*$", "");
         sb.append(tmp);
         creado = false;
      } catch (IOException exc) {
      }
      return this;
   }

   @Override
   public String toString() {
      StringBuilder sb2 = new StringBuilder(sb.length() + 100);
      if (creado) {
         sb2.append("<html>");
         sb2.append("<body ").append(bodyScript).append(">");
      }
      sb2.append(sb);
      sb2.append("</body>");
      sb2.append("</html>");
      return sb2.toString();
   }
}
