<?php
/**
 * @author: Félix José Hernández <fhernandeze@grafcan.com>
 * @link: http://visor.grafcan.es/busquedas/toponimobbox/1/50/?texto=chineguas
 * @test: http://192.168.20.133/busquedas/toponimobbox/1/50/373816.25732961943,3147917.992193923,377462.50394832075,3149760.7985298247/?texto=guagua
 * @params: page, num, texto, bbox
 * TODO: 171005, comentamos la opción de origen en el procedimiento almacenado
 * origenes [30,39,160,10,11,12,13,15,16,17,18,40,50,14,19,20,21,31,32,33,34,35,36,37,38,151,152,153,154,191]
 * 373816.25732961943,3147917.992193923,377462.50394832075,3149760.7985298247
 * @data:
 * @return: json, time in milisecods
 */
$t1 = microtime(true);
header('Content-type: application/json; charset=utf-8');
if (
    !isset($_GET["page"]) ||
    !isset($_GET["num"]) ||
    !isset($_GET["texto"]) ||
    !isset($_GET["bbox"])
) {
    echo '{"error": "Faltan parámetros"}';
    exit;
}
$page = $_GET["page"];
$num = $_GET["num"];
$text = $_GET["texto"];
$bbox = explode(',', $_GET["bbox"]);
$dbconn = new PDO('pgsql:user=postgres dbname=dbtoponimia port=5433');
if (!$dbconn) {
    echo "No pg_connect";
    exit;
}
$total = 0;
//$sql = "SELECT * FROM visor.gettoponimocount(:text, :page, :num, :xmin, :ymin, :xmax, :ymax, true, '30,39,160,10,11,12,13,15,16,17,18,40,50,14,19,20,21,31,32,33,34,35,36,37,38,151,152,153,154,191')";
$sql = "SELECT * FROM visor.gettoponimocount(:text, :page, :num, :xmin, :ymin, :xmax, :ymax, true, '')";
$stmt = $dbconn->prepare($sql);
$stmt->bindParam(":text", $text, PDO::PARAM_STR);
$stmt->bindParam(":page", $page, PDO::PARAM_INT);
$stmt->bindParam(":num", $num, PDO::PARAM_INT);
$stmt->bindParam(":xmin", $bbox[0], PDO::PARAM_STR);
$stmt->bindParam(":ymin", $bbox[1], PDO::PARAM_STR);
$stmt->bindParam(":xmax", $bbox[2], PDO::PARAM_STR);
$stmt->bindParam(":ymax", $bbox[3], PDO::PARAM_STR);
$stmt->execute();
$ret = $stmt->fetch(PDO::FETCH_NUM);
$t2 = round((microtime(true) - $t1) * 1000);
if ($ret) {
    $total = $ret[0];
}
unset($sql);
unset($ret);
$sql = "SELECT * FROM visor.gettoponimo(:text, :page, :num, :xmin, :ymin, :xmax, :ymax, true, '')";
$stmt = $dbconn->prepare($sql);
$stmt->bindParam(":text", $text, PDO::PARAM_STR);
$stmt->bindParam(":page", $page, PDO::PARAM_INT);
$stmt->bindParam(":num", $num, PDO::PARAM_INT);
$stmt->bindParam(":xmin", $bbox[0], PDO::PARAM_STR);
$stmt->bindParam(":ymin", $bbox[1], PDO::PARAM_STR);
$stmt->bindParam(":xmax", $bbox[2], PDO::PARAM_STR);
$stmt->bindParam(":ymax", $bbox[3], PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$t3 = round((microtime(true) - $t1) * 1000);
$url = "/busquedas/toponimoxmlbbox";
$url_prev = "";
$url_next = "";
$url_first = "";
$url_last = "";
if ($page > 1){
    $url_prev = sprintf(
        "%s/%d/%d/%s/0/0/?texto=%s",
        $url,
        $page - 1,
        $num,
        $_GET["bbox"],
        urlencode($text)
    );
}
if (count($result) > 0){
    $url_next = sprintf(
        "%s/%d/%d/%s/0/0/?texto=%s",
        $url,
        $page + 1,
        $num,
        $_GET["bbox"],
        urlencode($text)
    );
}
$url_first = sprintf(
    "%s/%d/%d/%s/0/0/?texto=%s",
    $url,
    1,
    $num,
    $_GET["bbox"],
    urlencode($text)
);
$totalpage = 0;
if ($total % $num >0) {
    $totalpage = ($total / $num) + 1;
} else {
    $totalpage = ($total / $num);
}
$url_last = sprintf(
    "%s/%d/%d/%s/0/0/?texto=%s",
    $url,
    $totalpage,
    $num,
    $_GET["bbox"],
    urlencode($text)
);
if ($page == 1) {
    $url_prev = "";
}
if ($page == $totalpage) {
    $url_next = "";
}
if ($total < $num) {
    $url_first = "";
    $url_last = "";
}
$xml = new SimpleXMLElement('<rows/>');
foreach ($result as $row) {
    $xmlrow = $xml->addChild('row');
    $xmlrow->addChild('id', $row['id']);
    $xmlrow->addChild('localizacion', htmlspecialchars($row['localizacion']));
    $xmlrow->addChild('clasificacion', htmlspecialchars($row['clasificacion']));
    $xmlrow->addChild('nombre', htmlspecialchars($row['nombre']));
    $xmlrow->addChild('descripcion', htmlspecialchars($row['nombre']));
    $xmlrow->addChild('rank', $row['puntuacion']);
    $xmlrow->addChild('x', $row['longitud']);
    $xmlrow->addChild('y', $row['latitud']);
    $xmlrow->addChild('imagen', $row['imagen']);
    $xmlrow->addChild('codigo', $row['codigo']);
}
$t4 = round((microtime(true) - $t1) * 1000);
$xml->addAttribute('page', $page);
$xml->addAttribute('numpage', $num);
$xml->addAttribute('total', $total);
$xml->addAttribute('time', $t4);
$xml->addAttribute('urlprev', $url_prev);
$xml->addAttribute('urlnext', $url_next);
$xml->addAttribute('urlfirst', $url_first);
$xml->addAttribute('urllast', $url_last);
header('Content-type: text/xml; charset=utf-8');
print($xml->asXML());
$stmt = null;
$dbconn = null;
die();
?>
