<?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 GENERAL DE SALUD AUDITIVA'), 0, 1, 'C');
        $this->SetFont('Arial', '', 12);
        $this->Cell(0, 10, utf8_decode('Programa de conservación auditiva - Empleados'), 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 ColoredTableRow($columns, $widths, $fillColor) {
        $this->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
        $this->SetFont('Arial', '', 10);

        // Calcular la altura máxima de la fila
        $lineHeights = [];
        foreach ($columns as $i => $column) {
            $lineHeights[] = $this->NbLines($widths[$i], utf8_decode($column)) * 6;
        }
        $rowHeight = max($lineHeights);

        // Verificar si hay espacio suficiente en la página actual
        if ($this->GetY() + $rowHeight > 270) { // 270 es el límite antes del pie de página
            $this->AddPage();
        }

        // Dibujar las celdas
        $this->SetX(10);
        foreach ($columns as $i => $column) {
            $x = $this->GetX();
            $y = $this->GetY();
            $this->Rect($x, $y, $widths[$i], $rowHeight, 'DF');
            $this->MultiCell($widths[$i], 6, utf8_decode($column), 0, 'J');
            $this->SetXY($x + $widths[$i], $y);
        }
        $this->Ln($rowHeight);
    }

    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;
    }
}

$sqlEmpleados = "SELECT * FROM empleados";
$resultEmpleados = $conexion->query($sqlEmpleados);

// Inicializar estadísticas
$estadisticas = [
    'Sanos' => 0,
    'En seguimiento' => 0,
    'Susceptibles' => 0,
    'Casos confirmados' => 0
];

$factorsCount = []; // Para contar cada factor de riesgo

if ($resultEmpleados->num_rows > 0) {
    $pdf = new PDF();
    $pdf->AddPage();

    // Título General
    $pdf->SectionTitle('Información General de Empleados');

    while ($empleado = $resultEmpleados->fetch_assoc()) {
        if ($pdf->PageNo() > 1) {
            $pdf->AddPage(); // Salto a una nueva página para cada empleado excepto el primero
        }        
        // 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;

        // Información del Trabajador
        $pdf->SectionTitle('Información del Trabajador');
        $pdf->SetFont('Arial', '', 10);
        $pdf->ColoredTableRow([
            'Nombre', 'Identificación', 'Cargo', 'Área', 'Edad', 'Sexo', 'Fecha de Ingreso', 'Experiencia'
        ], [25, 25, 25, 25, 20, 20, 30, 20], [220, 220, 220]);
        $pdf->ColoredTableRow([
            $empleado['nombre'], $empleado['documento'], $empleado['cargo'], $empleado['area'],
            $edad, $empleado['sexo'], $empleado['fecha_ingreso'], $empleado['experiencia'] . ' años'
        ], [25, 25, 25, 25, 20, 20, 30, 20], [255, 255, 255]);

        // 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);
        $stmtFactores->bind_param('i', $empleado['id']);
        $stmtFactores->execute();
        $factores = $stmtFactores->get_result();

        $pdf->SectionTitle('Factores de Riesgo');
        $pdf->ColoredTableRow(['Factor de Riesgo', 'Presente', 'Porcentaje'], [90, 50, 50], [52, 152, 219]);
        $porcentaje_salud = 100;

        while ($factor = $factores->fetch_assoc()) {
            $pdf->ColoredTableRow([
                $factor['factor'], $factor['presente'], $factor['porcentaje'] . '%'
            ], [90, 50, 50], [255, 255, 255]);

            if ($factor['presente'] === 'Sí') {
                $porcentaje_salud -= $factor['porcentaje'];
                // Contar cada factor de riesgo
                if (!isset($factorsCount[$factor['factor']])) {
                    $factorsCount[$factor['factor']] = 0;
                }
                $factorsCount[$factor['factor']]++;
            }
        }

        // Estado de Salud
        $clasificacion = '';
        if ($porcentaje_salud >= 80) {
            $clasificacion = 'Sanos';
            $estadisticas['Sanos']++;
        } elseif ($porcentaje_salud >= 50) {
            $clasificacion = 'En seguimiento';
            $estadisticas['En seguimiento']++;
        } elseif ($porcentaje_salud >= 30) {
            $clasificacion = 'Susceptibles';
            $estadisticas['Susceptibles']++;
        } else {
            $clasificacion = 'Casos confirmados';
            $estadisticas['Casos confirmados']++;
        }

        $pdf->SectionTitle('Estado de Salud');
        $pdf->ColoredTableRow([
            'Porcentaje de Salud', 'Clasificación'
        ], [95, 95], [50, 205, 50]);
        $pdf->ColoredTableRow([
            $porcentaje_salud . '%', $clasificacion
        ], [95, 95], [255, 255, 255]);

        // Actividades 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);
        $stmtActividades->bind_param('s', $empleado['nombre']);
        $stmtActividades->execute();
        $actividades = $stmtActividades->get_result();

        $pdf->SectionTitle('Actividades Asignadas');
        $pdf->ColoredTableRow(['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]);
        }

        $pdf->Ln(10); // Separación entre empleados
    }

    // Resumen de estadísticas
    $pdf->AddPage();
    $pdf->SectionTitle('Resumen de Estadísticas');
    $pdf->ColoredTableRow(['Categoría', 'Cantidad'], [120, 70], [52, 152, 219]);

    // Agregar estadísticas por clasificación
    foreach ($estadisticas as $categoria => $cantidad) {
        $pdf->ColoredTableRow([$categoria, $cantidad], [120, 70], [255, 255, 255]);
    }

    // Agregar estadísticas por factores de riesgo
    $pdf->SectionTitle('Factores de Riesgo (Resumen)');
    $pdf->ColoredTableRow(['Factor de Riesgo', 'Cantidad'], [120, 70], [52, 152, 219]);
    foreach ($factorsCount as $factor => $cantidad) {
        $pdf->ColoredTableRow([$factor, $cantidad], [120, 70], [255, 255, 255]);
    }

    $pdf->Output();
} else {
    echo "<script>
            alert('No hay empleados registrados.');
            window.location.href = 'listar_empleados.php';
          </script>";
    exit;
}
?>
