<?php
session_start();
header('Content-Type: application/json');
require_once __DIR__ . '/../db/conexion.php';
require_once __DIR__ . '/../phpmailer/correo_altas.php';
require_once __DIR__ . '/../subdistribuidor/actualizar_plantilla_subd.php';

$response = ['success' => false, 'message' => ''];

try {
    // Obtener usuario desde sesión
    $usuario = $_SESSION['nombre_usuario'] ?? 'Usuario desconocido';

    // Obtener datos del formulario
    $nombre             = strtoupper(trim($_POST['NOMBRE'] ?? ''));
    $apellidoPaterno    = strtoupper(trim($_POST['APELLIDO_PATERNO'] ?? ''));
    $apellidoMaterno    = strtoupper(trim($_POST['APELLIDO_MATERNO'] ?? ''));
    $curp               = strtoupper(trim($_POST['CURP'] ?? ''));
    $rfc                = strtoupper(trim($_POST['RFC'] ?? ''));
    $nss                = strtoupper(trim($_POST['NSS'] ?? ''));
    $numeroCuenta       = trim($_POST['NUMERO_CUENTA'] ?? ''); // <-- NUEVO CAMPO

    $puestoOriginal     = strtoupper(trim($_POST['PUESTO'] ?? ''));
    if (stripos($puestoOriginal, 'EJECUTIVO') !== false) {
        $puesto = "ED S&R EJECUTIVO UNIVERSAL";
    } else {
        $puesto = "ED S&R " . $puestoOriginal;
    }
    $idPuesto           = strtoupper(trim($_POST['ID_PUESTO'] ?? ''));
    $nombrePdv          = strtoupper(trim($_POST['NOMBRE_COMPLETO_PDV'] ?? ''));
    $clavePdv           = strtoupper(trim($_POST['CLAVE_UNICA_PDV'] ?? ''));
    $almacen            = strtoupper(trim($_POST['ALMACEN'] ?? ''));
    $genero             = strtoupper(trim($_POST['GENERO'] ?? ''));
    $fechaNacimiento    = $_POST['FECHA_NACIMIENTO'] ?? null;
    $fechaEntrada       = $_POST['FECHA_DE_ENTRADA'] ?? null;
    $estadoNac          = strtoupper(trim($_POST['estadoNacimiento'] ?? ''));
    $ciudadNac          = strtoupper(trim($_POST['ciudadNacimiento'] ?? ''));
    $modalidad          = isset($_POST['medioTiempo']) && $_POST['medioTiempo'] == "1" ? 'MEDIO TIEMPO' : 'TIEMPO COMPLETO';
    $vacanteCodigo      = strtoupper(trim($_POST['vacante_codigo'] ?? ''));

    // Validación básica del número de cuenta
    if (!empty($numeroCuenta) && !preg_match('/^[0-9]{8,30}$/', $numeroCuenta)) {
        throw new Exception('El número de cuenta debe contener solo números (8 a 30 dígitos).');
    }

    if (!$curp || !$rfc) {
        throw new Exception('CURP o RFC no recibidos correctamente.');
    }

    // 1. Insertar/actualizar en Altas (idempotente por PK RFC+CURP)
    $stmt = $conn->prepare("
        INSERT INTO Altas (
            NOMBRE, `APELLIDO PATERNO`, `APELLIDO MATERNO`, CURP, RFC,
            PUESTO, `ID PUESTO`, `NOMBRE COMPLETO PDV`, `CLAVE UNICA PDV`,
            ALMACEN, `FECHA NACIMIENTO`, GENERO, `FECHA DE ENTRADA`,
            estadoNacimiento, ciudadNacimiento
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE
            NOMBRE = VALUES(NOMBRE),
            `APELLIDO PATERNO` = VALUES(`APELLIDO PATERNO`),
            `APELLIDO MATERNO` = VALUES(`APELLIDO MATERNO`),
            PUESTO = VALUES(PUESTO),
            `ID PUESTO` = VALUES(`ID PUESTO`),
            `NOMBRE COMPLETO PDV` = VALUES(`NOMBRE COMPLETO PDV`),
            `CLAVE UNICA PDV` = VALUES(`CLAVE UNICA PDV`),
            ALMACEN = VALUES(ALMACEN),
            `FECHA NACIMIENTO` = VALUES(`FECHA NACIMIENTO`),
            GENERO = VALUES(GENERO),
            `FECHA DE ENTRADA` = VALUES(`FECHA DE ENTRADA`),
            estadoNacimiento = VALUES(estadoNacimiento),
            ciudadNacimiento = VALUES(ciudadNacimiento)
    ");

    $stmt->bind_param(
        "sssssssssssssss",
        $nombre, $apellidoPaterno, $apellidoMaterno, $curp, $rfc,
        $puesto, $idPuesto, $nombrePdv, $clavePdv,
        $almacen, $fechaNacimiento, $genero, $fechaEntrada,
        $estadoNac, $ciudadNac
    );

    if ($stmt->execute()) {
        // 2. Actualizar aspirantes con RFC, NSS y modalidad
        $stmt2 = $conn->prepare("UPDATE aspirantes SET rfc = ?, nss = ?, modalidad = ? WHERE curp = ?");
        $stmt2->bind_param("ssss", $rfc, $nss, $modalidad, $curp);

        if ($stmt2->execute()) {
            // 2.1 Actualizar Plantilla con la nueva función para subdistribuidores
            $actualizacionPlantilla = actualizarPlantillaSubd($conn, $curp, $fechaEntrada);

            if (!$actualizacionPlantilla) {
                error_log("❌ No se pudo actualizar la tabla Plantilla (subd) para $curp");
            }

            // 3. Insertar en altasDetails
            $nombreCompleto = "$nombre $apellidoPaterno $apellidoMaterno";
            $mensaje = "SACC ha solicitado la prealta del colaborador $nombreCompleto.";
            $stmt3 = $conn->prepare("INSERT INTO altasDetails (curp, rfc, queSeHizo) VALUES (?, ?, ?)");
            $stmt3->bind_param("sss", $curp, $rfc, $mensaje);
            $stmt3->execute(); // Error no crítico si falla

            // 4. Enviar correo
            $nombreReclutador = $_SESSION['attuid'] ?? 'USUARIO DESCONOCIDO';
            $destinatarios = "msaldivarc@rocasamexico.com";
            

            $correo = enviarCorreoPrealta($destinatarios, $nombreReclutador, $nombreCompleto, $curp, $rfc);

            // Registrar si falló
            if ($correo['status'] !== 'success') {
                error_log("❌ Error al enviar correo de prealta: " . $correo['message']);
            } else {
                error_log("✅ Correo enviado correctamente al registrar prealta.");
            }

            echo json_encode(['success' => true, 'message' => 'Registro guardado correctamente']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Error al actualizar aspirantes', 'error' => $stmt2->error]);
        }
    } else {
        echo json_encode(['success' => false, 'message' => 'Error al guardar en Altas', 'error' => $stmt->error]);
    }

} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => 'Excepción: ' . $e->getMessage()]);
}
