<?php
require 'fpdf/fpdf.php';
include 'config/db.php';

// Mostrar errores de PHP
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

class PDF extends FPDF {
    function Header() {
        $logoPath = './images/logotipopyp.png'; // Ruta relativa
        if (file_exists($logoPath)) {
            $this->Image($logoPath, 10, 10, 30, 30); // Logotipo en la esquina superior izquierda
        } else {
            $this->SetFont('Arial', 'I', 10);
            $this->Cell(0, 10, utf8_decode('Logotipo no disponible'), 0, 1, 'L'); // Mensaje si no se encuentra el logo
        }
        $this->SetFont('Arial', 'B', 16);
        $this->SetY(10);
        $this->Cell(0, 10, utf8_decode('INFORME DE SALUD AUDITIVA'), 0, 1, 'C');
        $this->SetFont('Arial', '', 12);
        $this->Cell(0, 10, utf8_decode('Programa de conservación auditiva'), 0, 1, 'C');
        $this->Ln(5);
        $this->Rect(10, 10, 190, 277); // Borde general del informe
    }

    function Footer() {
        $this->SetY(-30);
        $this->SetFont('Arial', 'I', 8);
        $this->Cell(0, 10, utf8_decode('Página ') . $this->PageNo(), 0, 0, 'C');
    }

    function SectionTitle($title) {
        $this->SetFont('Arial', 'B', 12);
        $this->SetFillColor(52, 152, 219); // Azul atractivo
        $this->SetTextColor(255, 255, 255);
        $this->Cell(190, 10, utf8_decode($title), 0, 1, 'C', true);
        $this->SetTextColor(0, 0, 0);
        $this->Ln(3);
    }

    function CenteredTableHeader($columns, $widths, $fillColor) {
        $this->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
        $this->SetFont('Arial', 'B', 10); // Fuente en negrita para los títulos
        $this->SetX(10); // Alinear al borde izquierdo del informe
        foreach ($columns as $i => $column) {
            $this->Cell($widths[$i], 10, utf8_decode($column), 1, 0, 'C', true); // 'C' para centrar
        }
        $this->Ln();
    }

    function ColoredTableRow($columns, $widths, $fillColor) {
        $this->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
        $this->SetFont('Arial', '', 10);
    
        // Calcular altura máxima de la fila
        $lineHeights = [];
        foreach ($columns as $i => $column) {
            $lineHeights[] = $this->NbLines($widths[$i], utf8_decode($column)) * 6; // Altura de cada línea
        }
        $rowHeight = max($lineHeights);
    
        // Dibujar las celdas
        $this->SetX(10); // Alinear al borde izquierdo
        foreach ($columns as $i => $column) {
            $x = $this->GetX();
            $y = $this->GetY();
            $this->Rect($x, $y, $widths[$i], $rowHeight, 'DF'); // Dibujar rectángulo de celda
            $this->MultiCell($widths[$i], 6, utf8_decode($column), 0, 'J'); // Justificar texto
            $this->SetXY($x + $widths[$i], $y); // Mover posición a la siguiente celda
        }
        $this->Ln($rowHeight); // Mover a la siguiente fila
    }
    
    function NbLines($width, $text) {
        $cw = &$this->CurrentFont['cw'];
        if ($width == 0) {
            $width = $this->w - $this->rMargin - $this->x;
        }
        $wmax = ($width - 2 * $this->cMargin) * 1000 / $this->FontSize;
        $s = str_replace("\r", '', $text);
        $nb = strlen($s);
        if ($nb > 0 and $s[$nb - 1] == "\n") {
            $nb--;
        }
        $sep = -1;
        $i = 0;
        $j = 0;
        $l = 0;
        $nl = 1;
        while ($i < $nb) {
            $c = $s[$i];
            if ($c == "\n") {
                $i++;
                $sep = -1;
                $j = $i;
                $l = 0;
                $nl++;
                continue;
            }
            if ($c == ' ') {
                $sep = $i;
            }
            $l += $cw[$c];
            if ($l > $wmax) {
                if ($sep == -1) {
                    if ($i == $j) {
                        $i++;
                    }
                } else {
                    $i = $sep + 1;
                }
                $sep = -1;
                $j = $i;
                $l = 0;
                $nl++;
            } else {
                $i++;
            }
        }
        return $nl;
    }
}

if (isset($_GET['id'])) {
    $empleado_id = intval($_GET['id']); // Asegúrate de que sea un número entero.
    if ($empleado_id <= 0) {
        echo "<script>
                alert('ID de empleado no especificado correctamente.');
                window.location.href = 'listar_empleados.php';
              </script>";
        exit;
    }

    // Consulta para obtener la información del empleado
    $sqlEmpleado = "SELECT * FROM empleados WHERE id = ?";
    $stmtEmpleado = $conexion->prepare($sqlEmpleado);
    if (!$stmtEmpleado) {
        die("Error en la consulta de empleado: " . $conexion->error);
    }
    $stmtEmpleado->bind_param('i', $empleado_id);
    $stmtEmpleado->execute();
    $empleado = $stmtEmpleado->get_result()->fetch_assoc();

    if (!$empleado) {
        echo "<script>
                alert('Empleado no encontrado.');
                window.location.href = 'listar_empleados.php';
              </script>";
        exit;
    }

    // Cálculo de la edad (asumiendo que tienes el campo 'fecha_nacimiento')
    $fechaNacimiento = new DateTime($empleado['fecha_nacimiento']);
    $hoy = new DateTime();
    $edad = $fechaNacimiento->diff($hoy)->y;

    // Obtener los factores de riesgo
    $sqlFactores = "
        SELECT enf.nombre_enfermedad AS factor, ef.respuesta AS presente, enf.porcentaje
        FROM empleados_factores_riesgo ef
        INNER JOIN enfermedades enf ON ef.criterio = enf.nombre_enfermedad
        WHERE ef.empleado_id = ?";
    $stmtFactores = $conexion->prepare($sqlFactores);
    if (!$stmtFactores) {
        die("Error en la consulta de factores de riesgo: " . $conexion->error);
    }
    $stmtFactores->bind_param('i', $empleado_id);
    $stmtFactores->execute();
    $factores = $stmtFactores->get_result();

    $porcentaje_salud = 100;
    $factoresData = [];
    while ($row = $factores->fetch_assoc()) {
        $factoresData[] = $row;
        if ($row['presente'] === 'Sí') {
            $porcentaje_salud -= $row['porcentaje'];
        }
    }

    if ($porcentaje_salud >= 80) {
        $clasificacion = 'Sano';
    } elseif ($porcentaje_salud >= 50) {
        $clasificacion = 'Seguimiento';
    } elseif ($porcentaje_salud >= 30) {
        $clasificacion = 'Susceptible';
    } else {
        $clasificacion = 'Caso Confirmado';
    }

    // Obtener las actividades del empleado utilizando el nombre del empleado
    $sqlActividades = "
        SELECT am.descripcion AS actividad, eae.estado, eae.fecha_actualizacion
        FROM estado_actividades_empleados eae
        INNER JOIN actividades_mejora am ON eae.actividad_id = am.id
        WHERE eae.empleado = ?";
    $stmtActividades = $conexion->prepare($sqlActividades);
    if (!$stmtActividades) {
        die("Error en la consulta de actividades: " . $conexion->error);
    }
    $stmtActividades->bind_param('s', $empleado['nombre']);
    $stmtActividades->execute();
    $actividades = $stmtActividades->get_result();

    $pdf = new PDF();
    $pdf->AddPage();

    // Información del Trabajador
    $pdf->SectionTitle('Información del Trabajador');
    $pdf->SetFont('Arial', '', 10);

    // Modificar tabla a 3 columnas, agregando "Experiencia"
    $pdf->ColoredTableRow(['Nombre', 'Identificación', 'Cargo'], [60, 65, 65], [220, 220, 220]);
    $pdf->ColoredTableRow([$empleado['nombre'], $empleado['documento'], $empleado['cargo']], [60, 65, 65], [255, 255, 255]);

    $pdf->ColoredTableRow(['Área', 'Edad', 'Sexo'], [60, 65, 65], [220, 220, 220]);
    $pdf->ColoredTableRow([$empleado['area'], $edad, $empleado['sexo']], [60, 65, 65], [255, 255, 255]);

    $pdf->ColoredTableRow(['Fecha de Nacimiento', 'Fecha de Ingreso', 'Experiencia'], [60, 65, 65], [220, 220, 220]);
    $pdf->ColoredTableRow([$empleado['fecha_nacimiento'], $empleado['fecha_ingreso'], $empleado['experiencia']], [60, 65, 65], [255, 255, 255]);

    // Factores de Riesgo
    $pdf->SectionTitle('Factores de Riesgo');
    $pdf->CenteredTableHeader(['Factor de Riesgo', 'Presente', 'Porcentaje'], [90, 50, 50], [52, 152, 219]);
    foreach ($factoresData as $factor) {
        $pdf->ColoredTableRow([
            $factor['factor'], $factor['presente'], $factor['porcentaje'] . '%'
        ], [90, 50, 50], [245, 245, 245]);
    }

    // Estado de Salud
    $pdf->SectionTitle('Estado de Salud');
    $pdf->CenteredTableHeader(['Porcentaje de Salud', 'Clasificación'], [95, 95], [46, 204, 113]);
    $pdf->ColoredTableRow([$porcentaje_salud . '%', $clasificacion], [95, 95], [255, 255, 255]);

    // Nueva página para las actividades
    $pdf->AddPage();
    
    // Actividades del Empleado
    $pdf->SectionTitle('Actividades Asignadas');
    $pdf->CenteredTableHeader(['Actividad', 'Estado', 'Fecha de Actualización'], [80, 50, 60], [52, 152, 219]);
    while ($actividad = $actividades->fetch_assoc()) {
        $pdf->ColoredTableRow([
            $actividad['actividad'],
            $actividad['estado'],
            $actividad['fecha_actualizacion']
        ], [80, 50, 60], [245, 245, 245]);
    }

    // Espacio para firmas dentro de un cuadro mejorado
    $pdf->Ln(20);
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(190, 40, '', 1, 1, 'C'); // Cuadro para las firmas
    $pdf->SetXY(20, $pdf->GetY() - 30);
    $pdf->Cell(70, 10, 'Firma del Empleado', 0, 0, 'C');
    $pdf->SetXY(120, $pdf->GetY());
    $pdf->Cell(70, 10, 'Firma del Responsable SST', 0, 1, 'C');

    // Espacios para las firmas
    $pdf->SetXY(20, $pdf->GetY() + 10);
    $pdf->Cell(70, 10, '_________________________', 0, 0, 'C');
    $pdf->SetXY(120, $pdf->GetY());
    $pdf->Cell(70, 10, '_________________________', 0, 1, 'C');

    $pdf->Output();
} else {
    echo "<script>
            alert('ID de empleado no especificado.');
            window.location.href = 'listar_empleados.php';
          </script>";
    exit;
}
?>
