<?php
session_start();

// error_reporting(E_ALL); // Descomentar para depuración si es necesario
// ini_set('display_errors', 1); // Descomentar para depuración si es necesario

// 1. Verificación de sesión más robusta y obtención del rol
if (!isset($_SESSION['Inicio']) || $_SESSION['Inicio'] !== "Ok" || !isset($_SESSION['Rol'])) {
    header("Location: ../login.php?m=5"); // m=5 para "acceso no autorizado"
    exit;
}

// 2. Determinar la URL del menú basada en el rol para la redirección
$urlMenuCorrespondiente = "";
switch ($_SESSION['Rol']) {
    case "Administrativo":
        $urlMenuCorrespondiente = "../MenuAdministrativo.php";
        break;
    case "Titular":
        $urlMenuCorrespondiente = "../MenuTitular.php";
        break;
    case "Pasante":
        // Los pasantes no deberían poder ejecutar la actualización.
        header("Location: ../login.php?m=4"); // m=4 para rol no permitido
        exit;
        break;
    default:
        header("Location: ../login.php?m=6"); // m=6 para "rol desconocido"
        exit;
}
// Solo Admin y Titular pueden proceder.

// 3. Obtener el ID del registro a actualizar consistentemente
$id = null;
// UIBele.php envía 'id_bele_a_modificar' en el POST
if (isset($_POST['id_bele_a_modificar']) && !empty($_POST['id_bele_a_modificar'])) {
    $id = $_POST['id_bele_a_modificar'];
} elseif (isset($_SESSION['id_bele_actual_modificacion']) && !empty($_SESSION['id_bele_actual_modificacion'])) {
    // Fallback (usar con cuidado, POST debería ser la fuente principal)
    $id = $_SESSION['id_bele_actual_modificacion'];
}

if (empty($id) || !filter_var($id, FILTER_VALIDATE_INT)) {
    unset($_SESSION['id_bele_actual_modificacion']);
    // Redirigir a UBele.php (listado) con error si el ID no es válido.
    // El usuario normalmente no vería esta redirección si el form UIBele siempre envía el ID.
    // Pero es una salvaguarda.
    // Usamos UBele.php ya que es la página de listado para modificar Bele.
    header("Location: UBele.php?n=bele_invalid_id_update");
    exit;
}

// 4. Obtener los datos del formulario usando $_POST
// $clave_paciente no se actualiza aquí, es solo informativo si lo necesitaras.
// $clave_paciente =  isset($_POST['clave_paciente']) ? $_POST['clave_paciente'] : null;
$fecha_evaluacion =  isset($_POST['fecha_evaluacion']) ? $_POST['fecha_evaluacion'] : null;
$edad =  isset($_POST['edad']) ? $_POST['edad'] : null;
$edad_corregida =  isset($_POST['edad_corregida']) ? $_POST['edad_corregida'] : null;
$rango_edad=  isset($_POST['rango_edad']) ? $_POST['rango_edad'] : null;
$punt_bruto_bele = isset($_POST['punt_bruto_bele']) ? $_POST['punt_bruto_bele'] : null;
$punt_esc_bele = isset($_POST['punt_esc_bele']) ? $_POST['punt_esc_bele'] : null;
$fonema_con_retras = isset($_POST['fonema_con_retras']) ? $_POST['fonema_con_retras'] : null;
$subgrupo_consonanticos = isset($_POST['subgrupo_consonanticos']) ? $_POST['subgrupo_consonanticos'] : null;
$subgrupo_diptongos = isset($_POST['subgrupo_diptongos']) ? $_POST['subgrupo_diptongos'] : null;    
$bele_interpreta = isset($_POST['bele_interpreta']) ? $_POST['bele_interpreta'] : null;

// Validación básica de datos
if (empty($fecha_evaluacion) || empty($edad) ||
    is_null($punt_bruto_bele) || is_null($punt_esc_bele) || is_null($fonema_con_retras) || is_null($bele_interpreta)) {
    unset($_SESSION['id_bele_actual_modificacion']);
    // Redirigir a UBele.php con error
    header("Location: UBele.php?id=" . urlencode($id) . "&n=bele_missing_data_update");
    exit;
}

include("../Php/Conexion.php");
$Con = Conectar();

if (!$Con) {
    unset($_SESSION['id_bele_actual_modificacion']);
    // Redirigir a UBele.php con error
    header("Location: UBele.php?id=" . urlencode($id) . "&n=bele_db_conn_error_update");
    exit;
}

// 5. Consulta UPDATE con el nombre correcto de la PK
// Asumiendo que la PK de la tabla 'bele' es 'id'
$SQL  = "UPDATE bele SET fecha_evaluacion=?, edad=?, edad_corregida =?, rango_edad = ?,
         punt_bruto_bele=?, punt_esc_bele=?, fonema_con_retras=?, subgrupo_consonanticos=?, subgrupo_diptongos=?, bele_interpreta=?
         WHERE id=?"; // Usar el nombre correcto de la PK

$stmt = mysqli_prepare($Con, $SQL);

if ($stmt) {
    // 6. Ajustar los tipos en mysqli_stmt_bind_param()
    // fecha(s), edad(s), bruto(s), escalar(s), fonemas(s), interpreta(s), id(i)
    // Si bruto y escalar son numéricos en BD y no pueden ser "NA", usa 'i' o 'd'.
    // Si pueden ser "NA", 's' es más seguro.
    mysqli_stmt_bind_param($stmt, "ssssiissssi", // 11 letras para 11 variables
    $fecha_evaluacion,
    $edad,
    $edad_corregida, 
    $rango_edad, 
    $punt_bruto_bele,
    $punt_esc_bele,
    $fonema_con_retras,
    $subgrupo_consonanticos,
    $subgrupo_diptongos,
    $bele_interpreta,
    $id
);

    if (mysqli_stmt_execute($stmt)) {
        $RegistrosAfectados = mysqli_stmt_affected_rows($stmt);
        // error_log("USBele.php - ID: $id, Afectados: $RegistrosAfectados, POST: " . print_r($_POST, true)); // Para depuración
        
        mysqli_stmt_close($stmt);
        Cerrar($Con);
        unset($_SESSION['id_bele_actual_modificacion']); // Limpiar la sesión

        if ($RegistrosAfectados > 0) {
            // Éxito REAL: los datos cambiaron. Redirigir a UBele.php (listado).
            header("Location: UBele.php?m=bele_update_success");
            exit;
        } elseif ($RegistrosAfectados == 0) {
            // No se modificó ninguna fila (ID no encontrado O datos idénticos). Redirigir a UBele.php.
            header("Location: UBele.php?id=" . urlencode($id) . "&m=bele_no_changes_made");
            exit;
        } else { // $RegistrosAfectados < 0, error
            error_log("USBele.php - Error en affected_rows (<0): " . $RegistrosAfectados . " para ID: " . $id);
            header("Location: UBele.php?id=" . urlencode($id) . "&n=bele_update_error_affected");
            exit;
        }
    } else {
        $error_msg_execute = mysqli_stmt_error($stmt);
        error_log("USBele.php - Error al ejecutar execute() para ID $id: " . $error_msg_execute);
        mysqli_stmt_close($stmt);
        Cerrar($Con);
        unset($_SESSION['id_bele_actual_modificacion']);
        header("Location: UBele.php?id=" . urlencode($id) . "&n=bele_update_failed_execute");
        exit;
    }
} else {
    $error_msg_prepare = mysqli_error($Con);
    error_log("USBele.php - Error al preparar UPDATE: " . $error_msg_prepare);
    Cerrar($Con);
    unset($_SESSION['id_bele_actual_modificacion']);
    // Es posible que el ID no esté disponible si la preparación falla muy temprano.
    // Redirigir a UBele.php si es posible, o al menú general.
    $redirectUrl = isset($id) ? "UBele.php?id=" . urlencode($id) . "&n=bele_prepare_failed" : htmlspecialchars($urlMenuCorrespondiente) . "?n=bele_prepare_failed_no_id";
    header("Location: " . $redirectUrl);
    exit;
}
// No debería llegar aquí
?>