<?php 
//------------------------------------------
//escrito por Jaime Rojas Landivar
//------------------------------------------
ini_set('display_errors', 1);
error_reporting(E_ALL);


$_GET = array_merge($_GET,$_POST);
// Obtenemos el/los parametro(s) con el medoto get
$gid = $_GET["gid"];

$gid_objeto = $gid;

//$srid = $_GET["srid"];



///////////////////////////////////////////////////////////////
// GENERAR IMAGEN PRINCIPAL DEL PLANO
//-------------------------------------------------------------


/*
$srid="32719";
$nombre_layer = 'red_alcantarillado';
$nombre_original = 'boRED_ALCANTARILLADO';
$nombre_tabla = 'bdgeo.red_alcantarillado';
$map_path = '/var/www/html/jmapReport/map_files/';
$conn = pg_connect("host=37.60.237.220 dbname=sigapas user=postgres password=sigapas2025s");
*/


$srid="32721";
$nombre_layer = 'barloc';
$nombre_original = 'slo_barrios';
$nombre_tabla = 'ide.barloc';
$map_path = '/var/www/html/jmapReport/map_files/';
$conn = pg_connect("host=37.60.237.220 dbname=jmap user=postgres password=sigapas2025s");


if (!$conn) die("Error conectando BD: " . pg_last_error());

$result = pg_query($conn, "SELECT nextval('admin.reportes_seq')");
$row = pg_fetch_row($result);

$id_reporte = $row[0];

$nombre = $nombre_original.strval($id_reporte); 

//echo $nombre;

$archivo_original = $map_path.$nombre_original.'.map';

if (!file_exists($archivo_original)) die("NO existe mapfile: $archivo_original");


$archivo_temporal = $map_path.$nombre.'.map';

// Copiar el archivo
//if (copy($map_path.$nombre_original.'.map', $map_path.$nombre.'.map')) {
//    echo "Mapfile copiado a: $nombre";
//} else {
//    echo "Error al copiar el mapfile.";
//}

$map = ms_newMapObj($archivo_original);

$res = pg_query_params($conn, "SELECT gid FROM {$nombre_tabla} WHERE gid = $1", array($gid));
if ($res === false) die("Error SQL comprobando tabla: " . pg_last_error());
if (pg_num_rows($res) === 0) die("Registro no encontrado: gid={$gid} en {$nombre_tabla}");

$layer = $map->getLayerByName($nombre_layer);
$layer->set("data", "geom FROM (SELECT * FROM ".$nombre_tabla." WHERE gid = ".$gid.") AS foo USING UNIQUE gid USING SRID=".$srid);
$map->save($archivo_temporal);

//echo 'probando';
// DETERMINAR EL EXTEN ADECUADO AL OBJETO SELECCIONADO

$par_escala=0;
if ($par_escala <= 0)
{
	$par_escala=1;
}
if ($par_escala > 9)
{
	$par_escala=9;
}

$sq = "select ";
$sq = $sq."cast(round(cast((x.campo1-(x.campo3-x.campo1)/10) as decimal),13) as text) as ext1, ";//solicitar explicacion.
$sq = $sq."cast(round(cast((x.campo2-(x.campo4-x.campo2)/10) as decimal),13) as text) as ext2, ";
$sq = $sq."cast(round(cast((x.campo3+(x.campo3-x.campo1)/10) as decimal),13) as text) as ext3, ";
$sq = $sq."cast(round(cast((x.campo4+(x.campo4-x.campo2)/10) as decimal),13) as text) as ext4 ";
$sq = $sq."from ";
$sq = $sq."(select "; 
$sq = $sq."cast((regexp_split_to_array(bb, E','))[1] as decimal) as campo1, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[2] as decimal) as campo2, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[3] as decimal) as campo3, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[4] as decimal) as campo4 ";
$sq = $sq."from ";
$sq = $sq."(select "; 
$sq = $sq."replace(replace(substr(cast(a.bb as varchar),5),' ',',') ,')','') as bb  ";
$sq = $sq."from ";
$sq = $sq."(select ST_Extent(geom) bb from ";
$sq = $sq."(select 1 objectid, st_union(st_snaptogrid(ST_Transform(geom,4326),0.00000000000001)) geom ";
$sq = $sq."from ".$nombre_tabla." t ";
$sq = $sq."where t.gid=".$gid.") e ";
$sq = $sq.") as a) as t1) as x;  ";

//echo $sq;
$ext1='                                          ';
$ext2='                                          ';
$ext3='                                          ';
$ext4='                                          ';
$result = pg_query ($conn, $sq);
if ($r_parcela = pg_fetch_array($result))
{
	$ext1=$r_parcela["ext1"];
	$ext2=$r_parcela["ext2"];
	$ext3=$r_parcela["ext3"];
	$ext4=$r_parcela["ext4"];
	//echo $ext1;
	//echo $ext2;
	//echo $ext3;
	//echo $ext4;
}
//echo "<p> " . 'despues de extent y de select'. ":</p>";
pg_free_result ($result);
pg_close ();

/*
// GENERAR ESCALA
$r_escala = pg_query ($conn,"select ide.calcular_escala(".$ext1.",".$ext4.",".$ext3.",".$ext4.",19) as escala;");
if ($r_esc = pg_fetch_array($r_escala))
{
	$escala=$r_esc["escala"];
	//echo "<p> " . '$escala:'.$escala. " </p>";
}
//echo "<p> " . '$ext1:'.$escala. " </p>";
pg_free_result ($r_escala);
pg_close ();
*/
$map->setExtent( $ext1, $ext2, $ext3, $ext4 );

$imgo = $map->draw();

if($imgo->imagepath == "")
{echo "Erro IMAGEPATH vazio";exit;}
$nombre_imagen = $imgo->imagepath."imagen_".$nombre.".png";
$imgo->saveImage($nombre_imagen);

///////////////////////////////////////////////////////////////
// FIN IMAGEN PRINCIPAL DEL PLANO
//-------------------------------------------------------------

//echo $nombre_imagen;


/*
///////////////////////////////////////////////////////////////
// GENERAR IMAGEN DE UBICACION por DISTRITO
//-------------------------------------------------------------
$srid="32719";
$nombre_layer = 'distrito';
$nombre_original = 'boDISTRITOS';
$nombre_tabla = 'bdgeo.distritos';
$map_path = '/var/www/html/jmapReport/map_files/';

//$conn = pg_connect("host=37.60.237.220 dbname=sigapas user=postgres password=sigapas2025s");

$result = pg_query($conn, "SELECT nextval('admin.reportes_seq')");
$row = pg_fetch_row($result);

$id_distrito = $row[0];

$gid = $id_distrito;

$result = pg_query($conn, "SELECT nextval('admin.reportes_seq')");
$row = pg_fetch_row($result);

$id_reporte = $row[0];

$nombre = $nombre_original.strval($id_reporte); 

//echo $nombre;

$archivo_original = $map_path.$nombre_original.'.map';
$archivo_temporal = $map_path.$nombre.'.map';

// Copiar el archivo
//if (copy($map_path.$nombre_original.'.map', $map_path.$nombre.'.map')) {
//    echo "Mapfile copiado a: $nombre";
//} else {
//    echo "Error al copiar el mapfile.";
//}

$map = ms_newMapObj($archivo_original);

$layer = $map->getLayerByName($nombre_layer);
$layer->set("data", "geom FROM (SELECT * FROM ".$nombre_tabla." WHERE gid = ".$gid.") AS foo USING UNIQUE gid USING SRID=".$srid);
$map->save($archivo_temporal);

//echo 'probando';
// DETERMINAR EL EXTEN ADECUADO AL OBJETO SELECCIONADO

if ($par_escala <= 0)
{
	$par_escala=1;
}

if ($par_escala > 9)
{
	$par_escala=9;
}

$sq = "select ";
$sq = $sq."cast(round(cast((x.campo1-(x.campo3-x.campo1)/10) as decimal),13) as text) as ext1, ";//solicitar explicacion.
$sq = $sq."cast(round(cast((x.campo2-(x.campo4-x.campo2)/10) as decimal),13) as text) as ext2, ";
$sq = $sq."cast(round(cast((x.campo3+(x.campo3-x.campo1)/10) as decimal),13) as text) as ext3, ";
$sq = $sq."cast(round(cast((x.campo4+(x.campo4-x.campo2)/10) as decimal),13) as text) as ext4 ";
$sq = $sq."from ";
$sq = $sq."(select "; 
$sq = $sq."cast((regexp_split_to_array(bb, E','))[1] as decimal) as campo1, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[2] as decimal) as campo2, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[3] as decimal) as campo3, ";
$sq = $sq."cast((regexp_split_to_array(bb, E','))[4] as decimal) as campo4 ";
$sq = $sq."from ";
$sq = $sq."(select "; 
$sq = $sq."replace(replace(substr(cast(a.bb as varchar),5),' ',',') ,')','') as bb  ";
$sq = $sq."from ";
$sq = $sq."(select ST_Extent(geom) bb from ";
$sq = $sq."(select 1 objectid, st_union(st_snaptogrid(ST_Transform(geom,4326),0.00000000000001)) geom ";
$sq = $sq."from ".$nombre_tabla." t ";
$sq = $sq."where t.gid=".$gid.") e ";
$sq = $sq.") as a) as t1) as x;  ";

//echo $sq;

$ext1='                                          ';
$ext2='                                          ';
$ext3='                                          ';
$ext4='                                          ';

$result = pg_query ($conn, $sq);
if ($r_parcela = pg_fetch_array($result))
{
	$ext1=$r_parcela["ext1"];
	$ext2=$r_parcela["ext2"];
	$ext3=$r_parcela["ext3"];
	$ext4=$r_parcela["ext4"];
	//echo $ext1;
	//echo $ext2;
	//echo $ext3;
	//echo $ext4;

}
//echo "<p> " . 'despues de extent y de select'. ":</p>";
pg_free_result ($result);
pg_close ();


// GENERAR ESCALA
//$r_escala = pg_query ($conn,"select ide.calcular_escala(".$ext1.",".$ext4.",".$ext3.",".$ext4.",19) as escala;");
//if ($r_esc = pg_fetch_array($r_escala))
//{
//	$escala=$r_esc["escala"];
//	//echo "<p> " . '$escala:'.$escala. " </p>";
//}
////echo "<p> " . '$ext1:'.$escala. " </p>";
//pg_free_result ($r_escala);
//pg_close ();


$map->setExtent( $ext1, $ext2, $ext3, $ext4 );

$imgo = $map->draw();

if($imgo->imagepath == "")
{echo "Erro IMAGEPATH vazio";exit;}
$nombre_imagen_distrito = $imgo->imagepath."imagen_".$nombre.".png";
$imgo->saveImage($nombre_imagen_distrito);

///////////////////////////////////////////////////////////////
// FIN IMAGEN DE UBICACION por DISTRITO
//-------------------------------------------------------------
*/



//echo $nombre_imagen_distrito;

//$gid = $id_objeto;

//-----------CONFIGURACION Y CREACION DEL ARCHIVO PDF
require(dirname(__FILE__).'/pacotes/fpdf/fpdf.php');

$pdf = new FPDF("P","mm",array(210,297)); //A4
$pdf->SetAutoPageBreak(false);
$pdf->SetDisplayMode( 100 , "single");
$pdf->SetMargins(0, 0, 0);
$pdf->AddPage('P');
$pdf->SetLineWidth(0.1);

$mapasize = getimagesize($nombre_imagen);
$wMapa = $mapasize[0];
$hMapa = $mapasize[1];
$nW  = $wMapa/10;
$nH  = $hMapa/10;
$anchomap = 210;
$altomap  = 297;
//Ancho y alto para el recuadro de los datos
$xdatos  = 10; //valor para x del recuadro de datos
$ydatos  = $altomap;  
//----------Imprimir la IMAGEN PRINCIPAL DEL MAPA en el PDF y dibujar los RECUADROS respectivos ---------------------
$pdf->Rect(10, 10, 190, 30, 'D'); // TITULO
$pdf->Image($nombre_imagen, 10, 40, 130, 130);//imagen principal del mapa
$pdf->Rect(10, 40, 130, 130, 'D');//Mapa CONTORNO DE LA IMAGEN PRINCIPLAL DEL OBJETO PRINCIPAL PLANO
$pdf->Rect(140, 40, 60, 15, 'D');//CONTORNO DEL TITULO DE LA UBICACION PLANO
$pdf->Rect(140, 55, 60, 60, 'D');//CONTORNO DE LA UBICACION PLANO
$pdf->Rect(140, 115, 60, 15, 'D');//CONTORNO DEL TITULO DE LA REFERENCIA PLANO
$pdf->Rect(140, 130, 60, 40, 'D');//CONTORNO DE LA REFERENCIA PLANO
$pdf->Rect(10, 170, 190, 30, 'D'); // CONTORNO PARA DATOS DE LOS OBJETOS
$pdf->Rect(10, 200, 190, 30, 'D'); // CONTORNO PARA DESCRIPCION DE LOS OBJETOS

$hoja = 1;
//------------------------------------------
// CONSULTAR DATOS DE LA TUBERÍA SELECCIONADA
//------------------------------------------

/*
$conn = pg_connect("host=37.60.237.220 dbname=sigapas user=postgres password=sigapas2025s");

$sql_datos = "
    SELECT 
        id_tuberia,
        diametro,
        pendiente,
        material,
        tipo_tuberia,
        profundidad,
        longitud,
        calle,
        estado_actual,
        responsable,
        ubicacion,
        distrito,
        otb,
        observaciones,
        usuario,
        to_char(fecha_usuario, 'DD/MM/YYYY') AS fecha_usuario,
        gestion
    FROM bdgeo.red_alcantarillado
    WHERE gid = $gid
";

$res_datos = pg_query($conn, $sql_datos);
$datos = pg_fetch_assoc($res_datos);
pg_close($conn);

//------------------------------------------
// IMPRIMIR LOS DATOS EN EL RECUADRO
//------------------------------------------

$pdf->SetFont('Arial', '', 9);
$pdf->SetTextColor(0, 0, 0);
$y = 172; // posición inicial dentro del recuadro DATOS
$x = 60;

// Cada línea con etiqueta + valor
$lineas = [
    "ID Tubería:"       => $datos['id_tuberia'],
    "Diámetro:"         => $datos['diametro'],
    "Material:"         => $datos['material'],
    "Tipo Tubería:"     => $datos['tipo_tuberia'],
    "Longitud (m):"     => $datos['longitud'],
    "Pendiente:"        => $datos['pendiente'],
    "Profundidad:"      => $datos['profundidad'],
    "Calle:"            => $datos['calle'],
    "Ubicación:"        => $datos['ubicacion'],
    "Distrito:"         => $datos['distrito'],
    "OTB:"              => $datos['otb'],
    "Estado Actual:"    => $datos['estado_actual'],
    "Responsable:"      => $datos['responsable'],
    "Usuario:"          => $datos['usuario'],
    "Fecha Registro:"   => $datos['fecha_usuario'],
    "Gestión:"          => $datos['gestion']
];

// recorrer y escribir los datos
foreach ($lineas as $campo => $valor) {
    if ($valor !== null && $valor !== '') {
        $pdf->SetXY($x, $y);
        $pdf->Cell(55, 1, utf8_decode($campo), 0, 0, 'L');
        $pdf->Cell(120, 1, utf8_decode($valor), 0, 1, 'L');
        $y += 5;
        // Si se sale del recuadro, puedes ajustar el valor base de $y o el alto del recuadro
        if ($y > 198) break;
    }
}

//echo $nombre_imagen;
$pdf->Rect(10, 10, $anchomap-20, $altomap-20, 'D');//Mapa CONTORNO DE LA HOJA

// ---------- AGREGAR LOGO ----------
$logo_path = dirname(__FILE__) . '/imagens/EMAPAS.jpeg'; // Cambia la ruta a tu logo
if (file_exists($logo_path)) {
    $pdf->Image($logo_path, 14, 13, 25, 0, 'JPEG'); // (x, y, ancho, alto automático)
}
// ---------- AGREGAR LOGO ----------
$logo_path = dirname(__FILE__) . '/imagens/logo_sigapas.png'; // Cambia la ruta a tu logo
if (file_exists($logo_path)) {
    $pdf->Image($logo_path, 170, 13, 25, 0, 'PNG'); // (x, y, ancho, alto automático)
}

//--------  IMPRIMIR TÍTULO 
$pdf->SetFont('Arial', 'B', 16); // Tipo Arial, negrita, tamaño 16
$pdf->SetTextColor(45, 90, 134); // Color azul (#2d5a86 opcional)
$pdf->SetXY(10, 18); // Posición dentro del recuadro del título
$pdf->Cell(190, 10, utf8_decode('CERTIFICACION DE RED DE AGUA POTABLE'), 0, 0, 'C');

//--------  IMPRIMIR TÍTULO UBICACION (CORREGIDO)
$pdf->SetFont('Arial', 'B', 11); // Tamaño de fuente ajustado
$pdf->SetTextColor(45, 90, 134);
// Se establece la posición XY en la esquina del recuadro (140, 40)
// La celda abarca el ancho (60) y alto (15) del recuadro para centrar el texto
$pdf->SetXY(140, 40);
$pdf->Cell(60, 15, utf8_decode('UBICACIÓN'), 0, 0, 'C');

//--------  IMPRIMIR TÍTULO LEYENDA (CORREGIDO)
$pdf->SetFont('Arial', 'B', 11); // Tamaño de fuente ajustado
$pdf->SetTextColor(45, 90, 134);
// Se establece la posición XY en la esquina del recuadro (140, 115)
// La celda abarca el ancho (60) y alto (15) del recuadro para centrar el texto
$pdf->SetXY(140, 115);
$pdf->Cell(60, 15, utf8_decode('LEYENDA'), 0, 0, 'C');



// TÍTULO DATOS (Esquineado)
$pdf->SetFont('Arial', 'B', 11); // Letra más pequeña para estos títulos
$pdf->SetTextColor(45, 90, 134); // Color azul (#2d5a86 opcional)
$pdf->SetXY(11, 171); // Posición con un pequeño margen (1mm)
$pdf->Cell(40, 5, utf8_decode('DATOS:'), 0, 0, 'L'); // 'L' para alinear a la izquierda



// TÍTULO DESCRIPCIÓN (Esquineado)
$pdf->SetFont('Arial', 'B', 11); // Letra más pequeña para estos títulos
$pdf->SetTextColor(45, 90, 134); // Color azul (#2d5a86 opcional)
$pdf->SetXY(11, 201);
$pdf->Cell(40, 5, utf8_decode('DESCRIPCION:'), 0, 0, 'L');

// TÍTULO REALIZADA POR (Esquineado)
$pdf->SetFont('Arial', 'B', 11); // Letra más pequeña para estos títulos
$pdf->SetTextColor(45, 90, 134); // Color azul (#2d5a86 opcional)
$pdf->SetXY(11, 231);
$pdf->Cell(40, 5, utf8_decode('REALIZADA POR:'), 0, 0, 'L');
*/



$pdf->Close();
$nombre_archivo = "mapa_hoja".$hoja.".pdf";
$pdf->Output($nombre_archivo,"I", true);

?>