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

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.');
}

require_once __DIR__ . '/../../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;

// Ruta de la plantilla
$plantillaPath = __DIR__ . '/../plantilla/plantillas_excel/LAYOUT ALTAS BANORTE 25.05.25.xlsx';
$spreadsheet = IOFactory::load($plantillaPath);
$sheet = $spreadsheet->getSheet(0); // Primera hoja

// Escribir datos a partir de la fila 6
$rowNum = 6;

function obtenerDatosBanorte($conn, $curp) {
    $tablasPlantilla = ['Plantilla', 'plantilla'];
    $tablasFinancieros = ['Plantilla_datos_financieros', 'plantilla_datos_financieros'];
    $tablasPersonales = ['Plantilla_datos_personales', 'plantilla_datos_personales'];
    foreach ($tablasPlantilla as $tablaP) {
        foreach ($tablasFinancieros as $tablaF) {
            foreach ($tablasPersonales as $tablaPer) {
                $sql = "SELECT p.NOMBRES, p.`APELLIDO PATERNO`, p.`APELLIDO MATERNO`, p.CPdeRFC, p.GENERO, p.`FECHA NACIMIENTO`, p.RFC, p.CURP,
                    f.calle_fiscal, f.Numero_fiscal, f.Colonia_fiscal, f.Clave_estado, f.Clave_municipio, f.Tarjeta, f.Numero_cuenta,
                    per.Tel_personal
                FROM $tablaP p
                LEFT JOIN $tablaF f ON p.CURP = f.curp
                LEFT JOIN $tablaPer per ON p.CURP = per.curp
                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 = obtenerDatosBanorte($conn, $curp);
    $comentarioAlta = '';
    $stmtComentario = $conn->prepare("SELECT Comentarios_altas FROM aspirantes WHERE curp = ? LIMIT 1");
    if ($stmtComentario) {
        $stmtComentario->bind_param("s", $curp);
        $stmtComentario->execute();
        $stmtComentario->bind_result($comentarioAlta);
        $stmtComentario->fetch();
        $stmtComentario->close();
    }
    // Obtener Registro y Tipo_tarj de Plantilla_datos_financieros
    $registro = '';
    $tipo_tarj = '';
    $stmtFin = $conn->prepare("SELECT Registro, Tipo_tarj FROM Plantilla_datos_financieros WHERE curp = ? LIMIT 1");
    if ($stmtFin) {
        $stmtFin->bind_param("s", $curp);
        $stmtFin->execute();
        $stmtFin->bind_result($registro, $tipo_tarj);
        $stmtFin->fetch();
        $stmtFin->close();
    }
    if ($fila) {
        // Lógica para omitir Numero_cuenta o Tarjeta según Registro y Tipo_tarj
        if ($registro === '01' && $tipo_tarj === '03') {
            $fila['Numero_cuenta'] = '';
        } elseif ($registro === '02' && $tipo_tarj === '04') {
            $fila['Tarjeta'] = '';
        } else {
            $fila['Numero_cuenta'] = '';
            $fila['Tarjeta'] = '';
        }
        $empleado = $comentarioAlta;
        $nombre = $fila['NOMBRES'];
        $pater = $fila['APELLIDO PATERNO'];
        $matern = $fila['APELLIDO MATERNO'];
        $ocupacion = '03';
        $primer_nombre = explode(' ', trim($fila['NOMBRES']))[0];
        $short_name = $primer_nombre . ' ' . $fila['APELLIDO PATERNO'];
        $ll = $fila['calle_fiscal'];
        $num = $fila['Numero_fiscal'];
        $vivida = '01';
        $entra = '0';
        $piso = '0';
        $depto = '0';
        $colonia = $fila['Colonia_fiscal'];
        $edo = $fila['Clave_estado'];
        $delega = $fila['Clave_municipio'];
        $cp = $fila['CPdeRFC'];
        $tel_casa = $fila['Tel_personal'];
        if ($tel_casa) {
            $tel_casa = preg_replace('/[()\s]/', '', $tel_casa);
        }
        $sexo = ($fila['GENERO'] === 'H') ? 'M' : (($fila['GENERO'] === 'M') ? 'F' : $fila['GENERO']);
        $naci = '';
        if (!empty($fila['FECHA NACIMIENTO']) && $fila['FECHA NACIMIENTO'] !== '0000-00-00') {
            $naci = date('d/m/Y', strtotime($fila['FECHA NACIMIENTO']));
        }
        $nacion = '001';
        $edo_civil = 'S';
        $reg_matrimo = 'S';
        $escolaridad = '006';
        $profesion = '252';
        $tipo_empl = '10';
        $rfc = $fila['RFC'];
        $curp = $fila['CURP'];
        $registro2 = '0';
        $tipo_tarj1 = '0';
        $tarje_new16 = $fila['Tarjeta'];
        $prod4 = '0705';
        $banco3 = '072';
        $tipo_cta2 = '072';
        $cuenta18 = $fila['Numero_cuenta'];
        $cr4 = '3777';
        $sueldo = '1';
        $tarje_old16 = '00000000';
        $datos = [
            $empleado, $nombre, $pater, $matern, $ocupacion, $short_name, $ll, $num, $vivida, $entra, $piso, $depto, $colonia,
            $edo, $delega, $cp, $tel_casa, $sexo, $naci,
            $nacion, $edo_civil, $reg_matrimo, $escolaridad, $profesion, $tipo_empl, $rfc, $curp,
            $registro2, $tipo_tarj1, $tarje_new16, $prod4, $banco3, $tipo_cta2, $cuenta18, $cr4, $sueldo, $tarje_old16
        ];
        // Escribir los datos en la fila correspondiente de la plantilla
        foreach ($datos as $colIdx => $valor) {
            $colLetra = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($colIdx + 1);
            $sheet->setCellValueExplicit($colLetra . $rowNum, $valor, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
        }
        // Insertar Registro en columna AB (28) y Tipo_tarj en columna AC (29)
        $sheet->setCellValueExplicit('AB' . $rowNum, $registro, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
        // Formatear clave municipio a 3 dígitos con ceros a la izquierda
        $delega_3dig = str_pad($delega, 3, '0', STR_PAD_LEFT);
        $sheet->setCellValueExplicit('O' . $rowNum, $delega_3dig, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
        // Eliminar ceros a la izquierda para la columna AC
        $tipo_tarj_sin_cero = ltrim($tipo_tarj, '0');
        $sheet->setCellValueExplicit('AC' . $rowNum, $tipo_tarj_sin_cero, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
        $rowNum++;
    }
}

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="altas_banorte.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
