<?php

require_once( dirname(__FILE__).'/../config/paths.inc.php' );
require_once( CLASE_USUARIO );
require_once( CLASE_ACCION );

class PedidoHTTP {

  private $parametros = array();
  private $usuario = null;
  private $query_string = null;
  private $metodo = null;

  public function __construct($autenticarse = true)
  {
    if ($autenticarse)
    {
      $this->usuario = $this->autenticarse();
    }
    $this->parametros = $this->parsear($_GET['params']);
    $this->query_string = $_GET['params'];
    $this->metodo = strtolower($_SERVER['REQUEST_METHOD']);
  }

  private function parsear($sParametros)
  {
	global $mapeo_ua;
    $valores = explode('/', $sParametros);
    if ( empty($valores) ) {
      return null;
    }
	
	/*
	 * Cuando se reciben los parametros se mapea el valor de la institución boleto
	 * con el valor de la unidad académica definido en institucionBoleto.inc.php
	 */	
	$valores[1] = $mapeo_ua[$valores[1]];
    return array( 
      'accion' => array_shift($valores),
      'parametros' => $valores
    );
  }

  public function esPost()
  {
    return ($this->metodo == 'post');
  }

  public function esGet()
  {
    return ($this->metodo == 'get');
  }

  public function getParametros()
  {
    return $this->parametros['parametros'];
  }

  public function getPostParametros()
  {
    return $_POST;
  }  

  public function getQueryString()
  {
    return $this->query_string;
  }
  
  public function getAccion()
  {
    return $this->parametros['accion'];
  }

  public function getClaseAccion()
  {
    return Accion::aClase( $this->getAccion() );
  }


  public function getUsuario()
  {
    return $this->usuario;
  }

  public function autenticarse()
  {
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
      $this->autenticar();
    } else {
      if ( $usuario = Usuario::validarUsuario($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) )
      {
        return $usuario;
      }
      else 
      {
        $this->autenticar();
      }
    }
  }

  private function autenticar()
  {
    header('WWW-Authenticate: Basic realm="Guarani REST"');
    header('HTTP/1.0 401 Unauthorized');
    exit;
  }
}
