<?php
// api_poligrafia/hechos/generar_excel_hechos.php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Methods: GET, OPTIONS");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

require_once(__DIR__ . '/../config.php');
require_once(__DIR__ . '/../vendor/autoload.php');

use PhpOffice\PhpSpreadsheet\IOFactory;

// 👉 ID del candidato recibido por GET (CANDIDATO_EMPRESA.ID_EMPRESA)
$idCandidato = isset($_GET['id_candidato']) ? intval($_GET['id_candidato']) : 0;
if ($idCandidato <= 0) {
    http_response_code(400);
    echo "ID de candidato inválido";
    exit;
}

// ================== CARGAR DATOS DEL CANDIDATO ==================
$sqlCandidato = "
    SELECT 
        c.NOMBRE_CANDIDATO,
        c.APELLIDO_CANDIDATO,
        c.NUMERO_DOCUMENTO_CANDIDATO,
        c.EMPRESA_CANDIDATO,
        ec.NOMBRE_EMPRESA
    FROM CANDIDATO_EMPRESA c
    LEFT JOIN EMPRESA_CLIENTE ec
        ON c.EMPRESA_CANDIDATO = ec.ID_EMPRESA
    WHERE c.ID_EMPRESA = ?
";

$stmtCandidato = $mysqli->prepare($sqlCandidato);
if (!$stmtCandidato) {
    http_response_code(500);
    echo "Error al preparar consulta de candidato: " . $mysqli->error;
    exit;
}

$stmtCandidato->bind_param("i", $idCandidato);
$stmtCandidato->execute();
$resultCandidato = $stmtCandidato->get_result();
$candidato = $resultCandidato->fetch_assoc();

if (!$candidato) {
    http_response_code(404);
    echo "No se encontró el candidato";
    exit;
}

// ================== CARGAR ÚLTIMO ESTUDIO DE SEGURIDAD (SI EXISTE) ==================
$sqlEstudio = "
    SELECT *
    FROM ESTUDIO_SEGURIDAD
    WHERE ID_CANDIDATO_EMPRESA = ? AND ESTADO_ESTUDIO = 1
    ORDER BY FECHA_CREACION DESC
    LIMIT 1
";

$stmtEstudio = $mysqli->prepare($sqlEstudio);
if (!$stmtEstudio) {
    http_response_code(500);
    echo "Error al preparar consulta de estudio: " . $mysqli->error;
    exit;
}

$stmtEstudio->bind_param("i", $idCandidato);
$stmtEstudio->execute();
$resultEstudio = $stmtEstudio->get_result();
$estudio = $resultEstudio->fetch_assoc();

// ================== CARGAR HECHOS Y NOVEDADES ==================
$sqlHechos = "
    SELECT 
        TIPO_NOTICIA,
        DELITO,
        CALIDAD,
        ESTADO,
        FECHA
    FROM HECHOS_NOVEDADES
    WHERE ID_CANDIDATO_EMPRESA = ? AND ESTADO_REGISTRO = 1
    ORDER BY FECHA DESC
";

$stmtHechos = $mysqli->prepare($sqlHechos);
if (!$stmtHechos) {
    http_response_code(500);
    echo "Error al preparar consulta de hechos: " . $mysqli->error;
    exit;
}

$stmtHechos->bind_param("i", $idCandidato);
$stmtHechos->execute();
$resultHechos = $stmtHechos->get_result();

// cierro statements (los resultados ya están cargados en memoria)
$stmtCandidato->close();
$stmtEstudio->close();
$stmtHechos->close();

// Pasar hechos a array
$hechos = [];
while ($row = $resultHechos->fetch_assoc()) {
    $hechos[] = $row;
}

// ================== CARGAR PLANTILLA EXCEL ==================
$templatePath = __DIR__ . "/PLANTILLA INFORME CONSULTA ANTECEDENTES HECHOS - ADVERSOS.xls";
if (!file_exists($templatePath)) {
    http_response_code(500);
    echo "No se encontró la plantilla de Excel en: " . $templatePath;
    exit;
}

$spreadsheet = IOFactory::load($templatePath);
$sheet = $spreadsheet->getSheetByName('Hoja1');
if (!$sheet) {
    $sheet = $spreadsheet->getActiveSheet();
}

// ================== MAPEO DE CAMPOS A CELDAS ==================
$nombreCompleto = trim(($candidato['NOMBRE_CANDIDATO'] ?? '') . ' ' . ($candidato['APELLIDO_CANDIDATO'] ?? ''));
$cedula         = $candidato['NUMERO_DOCUMENTO_CANDIDATO'] ?? '';
$empresa        = $candidato['NOMBRE_EMPRESA'] ?? '';

$cargoAspira      = $estudio['CARGO_ASPIRA']              ?? '';
$procTexto        = $estudio['PROCURADURIA']              ?? '';
$policiaTexto     = $estudio['POLICIA_NACIONAL']          ?? '';
$runtDescripcion  = $estudio['OBS_RUNT_DESCRIPCION']      ?? '';
$ramaJudicialDesc = $estudio['OBS_RAMA_JUDICIAL_DESCRIPCION'] ?? '';

// --- Identificación ---
$sheet->setCellValue('D7', $nombreCompleto); // Nombres y Apellidos
$sheet->setCellValue('C8', $cedula);         // Cédula
$sheet->setCellValue('C9', $empresa);        // Cliente
$sheet->setCellValue('H9', date('Y-m-d'));   // Fecha de realización
$sheet->setCellValue('C10', $cargoAspira);   // Cargo

// --- Antecedentes ---
$sheet->setCellValue('E14', $procTexto);        // Procuraduría
$sheet->setCellValue('E15', $policiaTexto);     // Policía Nacional
$sheet->setCellValue('E16', $runtDescripcion);  // RUNT
$sheet->setCellValue('E17', $ramaJudicialDesc); // Rama Judicial

// ================== NOTICIA CRIMINAL EN UN SOLO PÁRRAFO (B13:I17) ==================
$descripcionNovedades = '';

if (count($hechos) > 0) {
    $frases = [];

    foreach ($hechos as $hecho) {
        $partes = [];

        if (!empty($hecho['TIPO_NOTICIA'])) {
            $partes[] = 'Tipo de noticia: ' . $hecho['TIPO_NOTICIA'];
        }
        if (!empty($hecho['DELITO'])) {
            $partes[] = 'Delito: ' . $hecho['DELITO'];
        }
        if (!empty($hecho['CALIDAD'])) {
            $partes[] = 'Calidad: ' . $hecho['CALIDAD'];
        }
        if (!empty($hecho['ESTADO'])) {
            $partes[] = 'Estado: ' . $hecho['ESTADO'];
        }
        if (!empty($hecho['FECHA'])) {
            $ts = strtotime($hecho['FECHA']);
            $fechaFormateada = $ts ? date('d/m/Y', $ts) : $hecho['FECHA'];
            $partes[] = 'Fecha: ' . $fechaFormateada;
        }

        if (!empty($partes)) {
            // Cada hecho como una frase; si hay varios, se separan con ". "
            $frases[] = implode(', ', $partes);
        }
    }

    $descripcionNovedades = implode('. ', $frases) . '.';
} else {
    $descripcionNovedades = 'No se registran noticias criminales reportadas a la fecha.';
}

// 👉 El rango B13:I17 está combinado en la plantilla, con escribir en B13 basta
$sheet->setCellValue('B13', $descripcionNovedades);
$sheet->getStyle('B13')->getAlignment()->setWrapText(true);

// ================== ENVIAR ARCHIVO AL NAVEGADOR ==================
$filename = "Informe_Hechos_Novedades_{$idCandidato}.xls";

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Cache-Control: max-age=0');

$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
exit;
