<?php
// Ocultamos advertencias para evitar errores de buffer
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING);
ini_set('display_errors', 0);

ob_start(); 

require('fpdf/fpdf.php');
require('db.php');

function seguro($dato) {
    return (string)($dato ?? '');
}

function fechaEnLetras($fecha) {
    if (empty($fecha)) return '';
    $meses = [
        '01' => 'enero', '02' => 'febrero', '03' => 'marzo',
        '04' => 'abril', '05' => 'mayo', '06' => 'junio',
        '07' => 'julio', '08' => 'agosto', '09' => 'septiembre',
        '10' => 'octubre', '11' => 'noviembre', '12' => 'diciembre'
    ];
    $timestamp = strtotime($fecha);
    return date('d', $timestamp) . " de " . $meses[date('m', $timestamp)] . " de " . date('Y', $timestamp);
}

class ReportePDF extends FPDF
{
    public function Header()
    {
        // Logo
        if(file_exists('IMG/imgutsem/logo_ut.png')) {
            $this->Image('IMG/imgutsem/logo_ut.png', 20, 8, 32); 
        }

        // Título Universidad
        $this->SetFont('Arial', 'B', 14);
        $this->SetXY(20, 15);
        $this->Cell(240, 10, 'Universidad Tecnológica del Sur del Estado de México', 0, 0, 'C');

        // Líneas Verdes
        $this->SetDrawColor(0, 130, 0); 
        $this->SetLineWidth(0.8);
        $this->Line(20, 30, 260, 30); 
        $this->SetLineWidth(0.3);
        $this->Line(20, 31.5, 260, 31.5);
        $this->SetDrawColor(0, 0, 0);
        $this->SetLineWidth(0.2);

        // Estructura fija
        $this->Ln(40);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(180);
        $this->SetY(35);
        $this->Cell(38);
        $this->Cell(150, 10, 'SOLICITUD DE MANTENIMIENTO CORRECTIVO DEL HARDWARE, SOFTWARE, SISTEMAS DE INFORMACIÓN Y COMUNICACIÓN', 0, 0, 'C');
        $this->Ln(28);
        $this->SetY(60);
        $this->Cell(95);
        $this->Cell(80, 10, 'REQUIERE PIEZA Y/O COMPONENTE (TÉCNICO)*:', 0, 0, 'L', 0);
        $this->Ln(7);
        $this->SetY(42);
        $this->Cell(165);
        $this->Cell(60, 10, 'NO. DE SOLICITUD (TÉCNICO):', 0, 0, 'C', 0);
        $this->Ln(7);
        $this->SetY(45);
        $this->Cell(40, 10, 'ÁREA:');
        $this->Ln(7);
        $this->SetY(51);
        $this->Cell(53, 10, 'UBICACIÓN:');
        $this->Ln(7);
        $this->SetY(57);
        $this->Cell(40, 10, 'NO. DE SERIE:');
        $this->SetY(48);
        $this->Cell(102);
        $this->Cell(20, 10, 'FECHA:', 0, 0, 'C', 0);
        $this->Ln(28);
        $this->SetY(62);
        $this->Cell(100, 20, 'DESCRIPCIÓN DEL EQUIPO, NECESIDAD O FALLA:');
        $this->Ln(7);
        $this->SetY(82);
        $this->Cell(100, 20, 'DIAGNÓSTICO DE FALLA (TÉCNICO):');
        $this->Ln(28);
        $this->SetY(102);
        $this->Cell(100, 20, 'ACTIVIDADES REALIZADAS (TÉCNICO):');
        $this->Ln(28);
        $this->SetY(120);
        $this->SetFont('Arial', 'I', 10);
        $this->Cell(100, 20, 'NOTA:');
        $this->SetY(146);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(100, 10, 'CUÁL ES EL NIVEL DE SATISFACCIÓN GENERAL DE LA ANTENCIÓN:', 0, 0, 'L', 0);
        
        $this->SetXY(136, 148.5);
        $this->SetFont('Arial', '', 8);
        $this->Cell(22, 5, 'BUENO', 1, 0, 'C');
        $this->Cell(22, 5, 'REGULAR', 1, 0, 'C');
        $this->Cell(22, 5, 'MALO', 1, 0, 'C');
    }

public function Footer()
{
    $this->SetFont('Arial', 'BI', 11);

    // Altura del pie
    $this->SetY(190);

    // Izquierda
    $this->SetXY(35, 190);
    $this->Cell(60, 6, 'F.E: 20-05-2022', 0, 0, 'L');

    // Derecha
    $this->SetXY(205, 190);
    $this->Cell(40, 6, 'FO-DSI-02/03', 0, 0, 'R');
}

    public function imprimirDatos($row)
    {
        $fechaFormateada = fechaEnLetras($row['Fecha'] ?? '');
        $this->SetFont('Arial', 'I', 9);
        
        $this->SetY(42); $this->Cell(220); $this->Cell(20, 10, seguro($row['folio_anual']), 0, 0, 'L', 0);
        $this->SetY(45); $this->Cell(26); $this->Cell(80, 10, seguro($row['Area']), 0, 0, 'L', 0);
        $this->SetY(51); $this->Cell(26); $this->Cell(50, 10, seguro($row['Ubicacion']), 0, 0, 'L', 0);
        $this->SetY(57); $this->Cell(26); $this->Cell(68, 10, seguro($row['NoSerie']), 0, 0, 'L', 0);
        $this->SetY(48); $this->Cell(121); $this->Cell(40, 10, seguro($fechaFormateada), 0, 0, 'L', 0);
        $this->SetY(60); $this->Cell(175); $this->Cell(40, 10, seguro($row['Componente']), 0, 0, 'L', 0);
        
        $this->SetXY(25, 73);
        $this->MultiCell(220, 5, trim(seguro($row['Descripcion']) . "\n" . seguro($row['Necesidad'])));
        $this->SetXY(25, 93);
        $this->MultiCell(220, 5, seguro($row['Diagnostico']));
        $this->SetXY(25, 113);
        $this->MultiCell(220, 5, seguro($row['Actividad']));
        $this->SetXY(25, 131);
        $this->MultiCell(220, 5, seguro($row['Observacion']));

        // Firmas
        $anchoCol = 57.5;
        $this->SetXY(25, 155);
        $this->SetFont('Arial', 'B', 9);
        $titulos = ['SOLICITÓ', 'EJECUTÓ', 'VERIFICÓ', 'RECIBIÓ'];
        foreach($titulos as $t) $this->Cell($anchoCol, 5, $t, 0, 0, 'C');

        $this->SetXY(25, 166);
        $this->SetFont('Arial', 'I', 8);
        $nombres = [trim(seguro($row['Nombre']).' '.seguro($row['Apellidos'])), seguro($row['Ejecuto']), seguro($row['Verifico']), seguro($row['Recibio'])];
        foreach($nombres as $n) $this->Cell($anchoCol, 5, $n, 0, 0, 'C');

        $this->SetXY(25, 170);
        $this->SetFont('Arial', 'B', 8);
        for ($i = 0; $i < 4; $i++) {
            $x = 25 + ($i * $anchoCol) + ($anchoCol/2);
            $this->Line($x-22, 170, $x+22, 170);
            $this->Cell($anchoCol, 5, 'NOMBRE Y FIRMA', 0, 0, 'C');
        }

        $this->SetXY(25, 178);
        $this->SetFont('Arial', 'B', 7);
        $this->MultiCell(230, 3, "*Si la corrección del equipo requiere reemplazo de una pieza o la Compra de algún componente nuevo, el tiempo de respuesta queda sin ser definido hasta que el Departamento de Recursos Materiales y Servicios Generales compre dicha pieza solicitada mediante una requisición de compra con formato FO-DRM-09.", 0, 'J');
    }
}

$Id = filter_input(INPUT_GET, 'Id', FILTER_VALIDATE_INT);
if ($Id) {
    $query = "SELECT * FROM mcorrect WHERE Id = ?";
    $stmt = mysqli_prepare($conexion, $query);
    mysqli_stmt_bind_param($stmt, "i", $Id);
    mysqli_stmt_execute($stmt);
    $res = mysqli_stmt_get_result($stmt);
    if ($row = mysqli_fetch_assoc($res)) {
        $pdf = new ReportePDF();
        $pdf->SetMargins(25, 25, 25);
        $pdf->AddPage('LANDSCAPE', 'letter');
        $pdf->imprimirDatos($row);
        while (ob_get_level()) ob_end_clean();
        $pdf->Output('I', 'Reporte_Mantenimiento.pdf');
        exit;
    }
}
while (ob_get_level()) ob_end_clean();
echo "Error: No se encontró el reporte o el ID no es válido.";
?>