<?php
// ajax/generar_ride.php
// Generador de RIDE (Representación Impresa del Documento Electrónico)
// Autor: Gemini Agent

require_once "../config/Conexion.php";

// Función de carga segura de TCPDF (copiada de generar_pdf_msp.php)
function cargarTCPDF()
{
    if (class_exists('TCPDF'))
        return true;

    $baseDir = dirname(__DIR__);
    $docRoot = isset($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['DOCUMENT_ROOT']) ? rtrim($_SERVER['DOCUMENT_ROOT'], '/') : $baseDir;
    $cpanelSharedPath = '/home/' . get_current_user() . '/public_html/tcpdf/tcpdf.php';

    $posibles = [
        $docRoot . '/tcpdf/tcpdf.php',
        $cpanelSharedPath,
        $baseDir . '/public/tcpdf/tcpdf.php',
        $baseDir . '/../public/tcpdf/tcpdf.php'
    ];

    foreach ($posibles as $ruta) {
        if (file_exists($ruta)) {
            require_once($ruta);
            return true;
        }
    }

    // Glob fallback
    $busqueda = glob($baseDir . '/public/*/tcpdf.php');
    if (!empty($busqueda)) {
        require_once($busqueda[0]);
        return true;
    }

    return false;
}

if (!cargarTCPDF()) {
    die("Error: No se encontró la librería TCPDF.");
}

// Recibir Clave de Acceso
if (!isset($_GET['claveAcceso'])) {
    die("Error: No se proporcionó clave de acceso.");
}

$claveAcceso = $_GET['claveAcceso'];
$rutaXml = __DIR__ . '/../files/sri/firmados/' . $claveAcceso . '.xml';

if (!file_exists($rutaXml)) {
    // Intentar buscar en autorizados si movimos archivos
    $rutaXml = __DIR__ . '/../files/sri/autorizados/' . $claveAcceso . '.xml';
    if (!file_exists($rutaXml)) {
        die("Error: No se encontró el XML autorizado para la clave: " . $claveAcceso);
    }
}

// Cargar XML
$xml = simplexml_load_file($rutaXml);

// --- EXTRACT DATA ---
$infoTrib = $xml->infoTributaria;
$infoFact = $xml->infoFactura;

$emisor = [
    'razonSocial' => (string) $infoTrib->razonSocial,
    'ruc' => (string) $infoTrib->ruc,
    'dirMatriz' => (string) $infoTrib->dirMatriz,
    'nroAutorizacion' => (string) $infoTrib->claveAcceso, // En offline suele ser la misma CA
    'fechaAutorizacion' => date('d/m/Y H:i'), // Estimado si no tenemos el response completo guardado
    'ambiente' => ((string) $infoTrib->ambiente == '1') ? 'PRUEBAS' : 'PRODUCCION',
    'emision' => ((string) $infoTrib->tipoEmision == '1') ? 'NORMAL' : 'INDISPONIBILIDAD',
    'claveAcceso' => (string) $infoTrib->claveAcceso
];

$cliente = [
    'razonSocial' => (string) $infoFact->razonSocialComprador,
    'identificacion' => (string) $infoFact->identificacionComprador,
    'fechaEmision' => (string) $infoFact->fechaEmision,
    'direccion' => (string) $infoFact->dirEstablecimiento, // A veces se usa este campo
];

$totales = [
    'subtotal' => (float) $infoFact->totalSinImpuestos,
    'descuento' => (float) $infoFact->totalDescuento,
    'total' => (float) $infoFact->importeTotal,
    'iva_12' => 0,
    'iva_15' => 0,
    'iva_0' => 0,
    'base_12' => 0,
    'base_15' => 0,
    'base_0' => 0
];

// Calcular desglose de impuestos desde el XML
foreach ($infoFact->totalConImpuestos->totalImpuesto as $imp) {
    $codigoPorcentaje = (string) $imp->codigoPorcentaje;
    $valor = (float) $imp->valor;
    $base = (float) $imp->baseImponible;

    if ($codigoPorcentaje == '2') {
        $totales['iva_12'] += $valor;
        $totales['base_12'] += $base;
    }
    if ($codigoPorcentaje == '4') {
        $totales['iva_15'] += $valor;
        $totales['base_15'] += $base;
    }
    if ($codigoPorcentaje == '0') {
        $totales['iva_0'] += $valor;
        $totales['base_0'] += $base;
    }
}

// --- PDF GENERATION ---

// Extend TCPDF for Header/Footer
class MYPDF extends TCPDF
{
    public function Header()
    {
        // Sin header personalizado - dejamos espacio limpio
    }
}

$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Sistema Medico');
$pdf->SetTitle('Factura ' . $emisor['nroAutorizacion']);
$pdf->SetMargins(10, 10, 10);
$pdf->SetAutoPageBreak(TRUE, 10);
$pdf->AddPage();

// Título centrado
$pdf->SetFont('helvetica', 'B', 16);
$pdf->SetTextColor(0, 86, 98); // Color #005662
$pdf->Cell(0, 10, 'FACTURA ELECTRÓNICA', 0, 1, 'C');
$pdf->Ln(3); // Espacio después del título

// Banner justo después del título
$bannerPath = __DIR__ . '/../public/img/banner.png';
if (file_exists($bannerPath)) {
    // Obtener dimensiones de la imagen para calcular altura proporcional
    list($width, $height) = getimagesize($bannerPath);
    $bannerWidth = 180;
    $bannerHeight = ($height / $width) * $bannerWidth;

    $pdf->Image($bannerPath, 15, '', $bannerWidth, $bannerHeight, 'PNG', '', 'T', false, 300, 'C', false, false, 0, false, false, false);
    $pdf->Ln($bannerHeight + 10); // Espacio después del banner (altura + margen)
}

$pdf->SetTextColor(0, 0, 0); // Resetear color a negro



$style = '
<style>
    table { width: 100%; font-family: helvetica; font-size: 9pt; }
    th { background-color: #EEE; font-weight: bold; border: 1px solid #333; padding: 4px; }
    td { border: 1px solid #333; padding: 4px; }
    .no-border { border: none; }
    .bold { font-weight: bold; }
    .title { font-size: 14pt; font-weight: bold; color: #005662; }
    .box { border: 1px solid #333; padding: 5px; border-radius: 5px; }
</style>';

$html = $style . '
<table cellpadding="5">
    <tr>
        <td width="50%" class="no-border">
            <div class="box">
                <span class="title">' . $emisor['razonSocial'] . '</span><br><br>
                <b>RUC:</b> ' . $emisor['ruc'] . '<br>
                <b>Dir. Matriz:</b> ' . $emisor['dirMatriz'] . '<br>
                <b>Obligado a llevar contabilidad:</b> NO
            </div>
        </td>
        <td width="50%" class="no-border">
             <div class="box">
                <b>RUC:</b> ' . $emisor['ruc'] . '<br>
                <b style="font-size:12pt">FACTURA</b><br>
                No. ' . $infoTrib->estab . '-' . $infoTrib->ptoEmi . '-' . $infoTrib->secuencial . '<br><br>
                <b>NÚMERO DE AUTORIZACIÓN:</b><br>
                <span style="font-size:8pt">' . $emisor['nroAutorizacion'] . '</span><br>
                <b>FECHA Y HORA DE AUTORIZACIÓN:</b><br>
                ' . $emisor['fechaAutorizacion'] . '<br>
                <b>AMBIENTE:</b> ' . $emisor['ambiente'] . '<br>
                <b>EMISIÓN:</b> ' . $emisor['emision'] . '<br>
                <b>CLAVE DE ACCESO:</b><br>
                <span style="font-size:8pt">' . $emisor['claveAcceso'] . '</span>
             </div>
        </td>
    </tr>
</table>
<br><br>

<div class="box">
    <table cellpadding="3" class="no-border">
        <tr>
            <td width="60%" class="no-border"><b>Razón Social / Nombres y Apellidos:</b> ' . $cliente['razonSocial'] . '</td>
            <td width="40%" class="no-border"><b>Identificación:</b> ' . $cliente['identificacion'] . '</td>
        </tr>
        <tr>
            <td width="60%" class="no-border"><b>Fecha Emisión:</b> ' . $cliente['fechaEmision'] . '</td>
            <td width="40%" class="no-border"><b>Dirección:</b> ' . $cliente['direccion'] . '</td>
        </tr>
    </table>
</div>
<br><br>

<table cellpadding="4">
    <thead>
        <tr>
            <th width="15%">Cod. Principal</th>
            <th width="10%">Cant</th>
            <th width="40%">Descripción</th>
            <th width="15%">Precio Unitario</th>
            <th width="10%">Desc.</th>
            <th width="10%">Precio Total</th>
        </tr>
    </thead>
    <tbody>';

foreach ($xml->detalles->detalle as $det) {
    $html .= '
        <tr>
            <td>' . $det->codigoPrincipal . '</td>
            <td align="center">' . $det->cantidad . '</td>
            <td>' . $det->descripcion . '</td>
            <td align="right">' . number_format((float) $det->precioUnitario, 2) . '</td>
            <td align="right">' . number_format((float) $det->descuento, 2) . '</td>
            <td align="right">' . number_format((float) $det->precioTotalSinImpuesto, 2) . '</td>
        </tr>';
}

$html .= '
    </tbody>
</table>
<br>

<table cellpadding="0" border="0">
    <tr>
        <td width="65%" class="no-border"></td>
        <td width="35%" class="no-border">
            <table cellpadding="4">
                <tr>
                    <td class="bold">SUBTOTAL 12%</td>
                    <td align="right">' . number_format($totales['base_12'], 2) . '</td>
                </tr>
                 <tr>
                    <td class="bold">SUBTOTAL 15%</td>
                    <td align="right">' . number_format($totales['base_15'], 2) . '</td>
                </tr>
                <tr>
                    <td class="bold">SUBTOTAL 0%</td>
                    <td align="right">' . number_format($totales['base_0'], 2) . '</td>
                </tr>
                <tr>
                    <td class="bold">SUBTOTAL Sin Impuestos</td>
                    <td align="right">' . number_format($totales['subtotal'], 2) . '</td>
                </tr>
                <tr>
                    <td class="bold">IVA 12%</td>
                    <td align="right">' . number_format($totales['iva_12'], 2) . '</td>
                </tr>
                 <tr>
                    <td class="bold">IVA 15%</td>
                    <td align="right">' . number_format($totales['iva_15'], 2) . '</td>
                </tr>
                <tr>
                    <td class="bold">VALOR TOTAL</td>
                    <td align="right">' . number_format($totales['total'], 2) . '</td>
                </tr>
            </table>
        </td>
    </tr>
</table>
';

$pdf->writeHTML($html, true, false, true, false, '');

// BARCODE (Code 128)
$styleBarcode = array(
    'position' => '',
    'align' => 'C',
    'stretch' => false,
    'fitwidth' => true,
    'cellfitalign' => '',
    'border' => false,
    'hpadding' => 'auto',
    'vpadding' => 'auto',
    'fgcolor' => array(0, 0, 0),
    'bgcolor' => false, //array(255,255,255),
    'text' => true,
    'font' => 'helvetica',
    'fontsize' => 8,
    'stretchtext' => 4
);

// $pdf->write1DBarcode($emisor['claveAcceso'], 'C128', '', '', '', 18, 0.4, $styleBarcode, 'N');


if (isset($returnPdfString) && $returnPdfString) {
    return $pdf->Output('RIDE_' . $emisor['nroAutorizacion'] . '.pdf', 'S'); // S: Return as string
} else {
    // Auto-imprimir removido a petición del usuario
    $pdf->Output('RIDE_' . $emisor['nroAutorizacion'] . '.pdf', 'I'); // I: Inline browser
}
?>