/* 
* 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 com.sun.net.httpserver.*;
import java.io.*;

public class Http {

   public Http() {
   }

   public static void enviarServidorNoDisponible(HttpExchange arg) throws Exception {
      arg.sendResponseHeaders(503, 0);
      GeneradorHtml html = new GeneradorHtml();
      html.insertTag("TITLE", "Servidor No Disponible");
      html.insertTag("H2", "Espere unos minutos para volver a intentarlo");
      enviarTexto(arg, html.toString());
   }

   public static void enviarTexto(HttpExchange arg, String texto) throws Exception {
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(arg.getResponseBody()));
      bw.write(texto);
      bw.close();
   }
   
   public static void enviarArchivo(HttpExchange arg, String fichero) throws Exception {
      arg.getResponseHeaders().set("Content-Type", tipoArchivo(fichero));
      arg.getResponseHeaders().set("Content-disposition", "attachment");
      arg.sendResponseHeaders(200, 0);
      FileInputStream fip = new FileInputStream(fichero);
      enviarStream(arg, fip);
      fip.close();
   }

   public static void enviarArchivoJar(HttpExchange arg, String nombre) throws Exception {
      arg.getResponseHeaders().set("Content-Type", tipoArchivo(nombre));
      arg.sendResponseHeaders(200, 0);
      InputStream is = servidor.utiles.Global.main.getClass().getResourceAsStream("/raizHttp/" + nombre);
      enviarStream(arg, is);
      is.close();
   }

   public static GeneradorHtml cargarHtmlJar(String nombre) throws Exception {
      InputStream is = servidor.utiles.Global.main.getClass().getResourceAsStream("/raizHttp/" + nombre);
      GeneradorHtml html = new GeneradorHtml();
      html.cargarHtml(is);
      return html;
   }

   public static void enviarStream(HttpExchange arg, InputStream is) throws Exception {
      OutputStream os = arg.getResponseBody();
      byte[] bufer = new byte[1024 * 4];
      int leidos;
      while ((leidos = is.read(bufer)) > 0) {
         os.write(bufer, 0, leidos);
      }
      os.close();
   }

   public static String tipoArchivo(String nombre) {
      if (nombre.endsWith("html")) {
         return "text/html";
      }
      return "application/octet-stream";
   }
}
