<?php
session_start();
require_once(__DIR__ . '/../../backend/db/conexion.php');

// Verifica si recibimos los CURP seleccionados
if (empty($_POST['curps'])) {
    die('No se recibieron registros para exportar.');
}
$curps = json_decode($_POST['curps'], true);
if (!$curps || !is_array($curps)) {
    die('Formato de datos incorrecto.');
}

// Incluye PhpSpreadsheet
require_once __DIR__ . '/../../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;

// Encabezados solicitados
$headers = [
    'DEPARTAMENTO INTERNO',
    'CENTRO DE COSTOS',
    'SUELDO MENSUAL REAL',
    'APELLIDOS',
    'NOMBRES',
    'RFC',
    'CURP',
    'NSS',
    'Codigo Fiscal',
    'Fecha movimiento'
];

// Prepara el Excel
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($headers, null, 'A1');

// Estilos para los encabezados
$headerStyles = [
    // DEPARTAMENTO INTERNO y CENTRO DE COSTOS y SUELDO MENSUAL REAL (A1:C1) - Rojo claro
    'A1:C1' => [
        'font' => ['bold' => true],
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'startColor' => ['rgb' => 'FF9999']
        ]
    ],
    // APELLIDOS y NOMBRES (D1:E1) - Verde claro
    'D1:E1' => [
        'font' => ['bold' => true],
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'startColor' => ['rgb' => '7ED47E']
        ]
    ],
    // RFC, CURP, NSS, Codigo Fiscal (F1:I1) - Azul claro
    'F1:I1' => [
        'font' => ['bold' => true],
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'startColor' => ['rgb' => 'A3BCE7']
        ]
    ],
    // Fecha movimiento (J1) - Amarillo claro
    'J1' => [
        'font' => ['bold' => true],
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'startColor' => ['rgb' => 'FFF7A3']
        ]
    ]
];
foreach ($headerStyles as $range => $style) {
    $sheet->getStyle($range)->applyFromArray($style);
}

$rowNum = 2;

// Función para obtener datos de la plantilla (mayúsculas o minúsculas)
function obtenerDatosPlantilla($conn, $curp) {
    $tablas = ['Plantilla', 'plantilla'];
    foreach ($tablas as $tabla) {
        $sql = "SELECT 
            p.`DEPARTAMENTO INTERNO`,
            IFNULL(c.centro_de_costos, 'Por definir') AS `CENTRO DE COSTOS`,
            p.`SUELDO MENSUAL` AS `SUELDO MENSUAL REAL`,
            CONCAT(p.`APELLIDO PATERNO`, ' ', p.`APELLIDO MATERNO`) AS APELLIDOS,
            p.NOMBRES,
            p.RFC,
            p.CURP,
            p.NSS,
            p.CPdeRFC AS `Codigo Fiscal`,
            p.`FECHA DE INGRESO` AS `Fecha movimiento`
        FROM $tabla p
        LEFT JOIN centros_costos c
            ON p.`DEPARTAMENTO INTERNO` = c.punto_de_venta
        WHERE p.CURP = ?";
        $stmt = $conn->prepare($sql);
        if ($stmt) {
            $stmt->bind_param("s", $curp);
            $stmt->execute();
            $result = $stmt->get_result();
            $fila = $result->fetch_assoc();
            if ($fila) {
                return $fila;
            }
        }
    }
    return null;
}

foreach ($curps as $curp) {
    $fila = obtenerDatosPlantilla($conn, $curp);
    if ($fila) {
        // Formatear fecha movimiento a dd/mm/yyyy si tiene valor
        $fecha_mov = $fila['Fecha movimiento'];
        if (!empty($fecha_mov) && $fecha_mov !== '0000-00-00') {
            $fecha_mov = date('d/m/Y', strtotime($fecha_mov));
        } else {
            $fecha_mov = '';
        }
        // Formatear sueldo mensual real como texto $000,000.00
        $sueldo = $fila['SUELDO MENSUAL REAL'];
        if (is_numeric($sueldo)) {
            $sueldo = '$' . number_format($sueldo, 2, '.', ',');
        } else {
            $sueldo = '';
        }
        $sheet->fromArray([
            $fila['DEPARTAMENTO INTERNO'],
            $fila['CENTRO DE COSTOS'],
            $sueldo,
            $fila['APELLIDOS'],
            $fila['NOMBRES'],
            $fila['RFC'],
            $fila['CURP'],
            $fila['NSS'],
            $fila['Codigo Fiscal'],
            $fecha_mov
        ], null, 'A' . $rowNum);
        // Forzar formato de texto en todas las columnas de la fila actual
        foreach (range('A','J') as $col) {
            $sheet->getStyle($col . $rowNum)
                ->getNumberFormat()
                ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
        }
        $rowNum++;
    }
}

// Prepara la descarga
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="altas_seleccionadas.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;