/* 
* 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.*;
import java.net.*;
import java.util.*;
import servidor.utiles.*;

public final class HttpRequest {

   String metodo = null;
   String query = null;
   HashMap<String, String> parametros;
   String primero = null;
   HttpExchange arg;

   public HttpRequest(HttpExchange arg) {
      this.arg = arg;
      cargar();
   }

   void cargar() {
      try {
         metodo = arg.getRequestMethod();
         URI uri = arg.getRequestURI();
         query = uri.getQuery();
         procesarParametros(uri);
      } catch (Exception exc) {
      }
   }

   void procesarParametros(URI uri) throws Exception {
      if (metodo.equals("POST")) {
         String cuerpo = leer();
         if (cuerpo != null) {
            parametros = new HashMap<>();
            String[] pares = Global.split(cuerpo, '&');
             for (String pare : pares) {
                 String[] pareja = pare.split("=", 2);
                 if (pareja.length == 2) {
                     parametros.put(pareja[0], pareja[1]);
                 } else {
                     parametros.put(pareja[0], null);
                 } if (primero == null) {
                     primero = pareja[0];
                 }
             }
         }
      }
   }

   public String leer() throws IOException {
      int largo = Integer.parseInt(arg.getRequestHeaders().getFirst("content-length"));
      if (largo > 0) {
         BufferedReader rd = new BufferedReader(new InputStreamReader(arg.getRequestBody()));
         char[] bufer = new char[largo];
         rd.read(bufer, 0, largo);
         return URLDecoder.decode(new String(bufer), "UTF-8");
      }
      return null;
   }

   public String getParameter(String nombre) {
      if (parametros != null) {
         return parametros.get(nombre);
      }
      return null;
   }

   public String getFirstParameter() {
      if (primero != null) {
         String valor = parametros.get(primero);
         if (valor != null) {
            return valor;
         } else {
            return primero;
         }
      }
      return null;
   }
}
