<?php
require_once __DIR__ . '/../shared/includes/protect.php';
require 'conexion.php';
require 'vendor/autoload.php'; // Asegúrate de haber instalado PhpSpreadsheet

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;

// Consulta SQL para obtener todos los registros
$query = "SELECT 
    am.fecha_atencion, am.hora_atencion, 
    t.apellidos_nombres, t.sexo, t.edad, t.dni_ce AS dni, t.empresa, 
    t.area, t.puesto_trabajo, 
    am.lugar_atencion, am.tipo_evento, 
    am.diagnostico_cie10, am.tratamiento, 
    am.descanso_medico, am.fecha_inicio_descanso, am.fecha_final_descanso, 
    am.seguimiento, am.responsable_registro
FROM Atencion_Medica am
JOIN Trabajador t ON am.id_trabajador = t.id_trabajador
ORDER BY am.fecha_atencion DESC, am.hora_atencion DESC, am.id_atencion DESC";

$stmt = $pdo->prepare($query);
$stmt->execute();
$atenciones = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Validar si hay datos para exportar
if (!$atenciones) {
    die('No hay datos para exportar.');
}

// Crear archivo Excel
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// 🔹 Aplicar estilo a los encabezados
$headers = array_keys($atenciones[0]);
$columnIndex = 'A';
foreach ($headers as $header) {
    $sheet->setCellValue($columnIndex . '1', strtoupper(str_replace('_', ' ', $header))); // Convierte a mayúsculas y reemplaza guiones bajos por espacios
    $sheet->getStyle($columnIndex . '1')->applyFromArray([
        'font' => ['bold' => true, 'color' => ['rgb' => 'FFFFFF']],
        'fill' => ['fillType' => Fill::FILL_SOLID, 'startColor' => ['rgb' => '4CAF50']],
        'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER],
    ]);
    $columnIndex++;
}

// 🔹 Agregar datos al Excel
$rowIndex = 2;
foreach ($atenciones as $row) {
    $columnIndex = 'A';
    foreach ($row as $value) {
        $sheet->setCellValue($columnIndex . $rowIndex, $value);
        $columnIndex++;
    }
    $rowIndex++;
}

// 🔹 Aplicar bordes a todas las celdas con datos
$lastColumn = chr(ord('A') + count($headers) - 1);
$sheet->getStyle("A1:{$lastColumn}" . ($rowIndex - 1))->applyFromArray([
    'borders' => [
        'allBorders' => [
            'borderStyle' => Border::BORDER_THIN,
            'color' => ['rgb' => '000000']
        ]
    ]
]);

// 🔹 Ajustar tamaño de las columnas automáticamente
foreach (range('A', $lastColumn) as $columnID) {
    $sheet->getColumnDimension($columnID)->setAutoSize(true);
}

// Crear archivo Excel
$writer = new Xlsx($spreadsheet);
$fileName = 'Atenciones_Medicas.xlsx';

// Enviar archivo al usuario
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
exit;
