<?php
session_start();
date_default_timezone_set('America/Mexico_City');

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

// 2. Determinar la URL del menú
$urlMenuCorrespondiente = "";
switch ($_SESSION['Rol']) {
    case "Administrativo": $urlMenuCorrespondiente = "../MenuAdministrativo.php"; break;
    case "Titular": $urlMenuCorrespondiente = "../MenuTitular.php"; break;
    case "Pasante": header("Location: ../login.php?m=4"); exit;
    default: header("Location: ../login.php?m=6"); exit;
}

// ===================================================================================
// --- 3. RECOGER DATOS DEL FORMULARIO ---
// ===================================================================================

function getIntOrNull($value) {
    return isset($value) && $value !== '' ? (int)$value : null;
}
function getFloatOrNull($value) {
    return isset($value) && $value !== '' ? (float)$value : null;
}
function getStringOrNull($value) {
    return isset($value) && $value !== '' ? $value : null;
}

// Obtener el ID del registro a actualizar
$id = getIntOrNull(isset($_POST['id_celf58']) ? $_POST['id_celf58'] : null);
if (empty($id)) {
    header("Location: UCELF5-8.php?n=celf58_invalid_id_update");
    exit;
}

// --- Cabecera ---
$fecha_evaluacion = getStringOrNull(isset($_POST['fecha_evaluacion']) ? $_POST['fecha_evaluacion'] : null);
$edad = getStringOrNull(isset($_POST['edad']) ? $_POST['edad'] : null);
$rango_edad = getStringOrNull(isset($_POST['rango_edad']) ? $_POST['rango_edad'] : null);

// --- Bloque A: Puntuaciones Principales y Clínicos ---
$celf58_stand_lengu_total = getIntOrNull(isset($_POST['celf58_stand_lengu_total']) ? $_POST['celf58_stand_lengu_total'] : null);
$celf58_percent_lengua_tota = getFloatOrNull(isset($_POST['celf58_percent_lengua_tota']) ? $_POST['celf58_percent_lengua_tota'] : null);
$celf58_leng_tot_interpr = getStringOrNull(isset($_POST['celf58_leng_tot_interpr']) ? $_POST['celf58_leng_tot_interpr'] : null);
$celf58_stand_leng_recep = getIntOrNull(isset($_POST['celf58_stand_leng_recep']) ? $_POST['celf58_stand_leng_recep'] : null);
$celf58_percent_leng_recept = getFloatOrNull(isset($_POST['celf58_percent_leng_recept']) ? $_POST['celf58_percent_leng_recept'] : null);
$celf58_leng_recep_inter = getStringOrNull(isset($_POST['celf58_leng_recep_inter']) ? $_POST['celf58_leng_recep_inter'] : null);
$celf58_stand_leng_expres = getIntOrNull(isset($_POST['celf58_stand_leng_expres']) ? $_POST['celf58_stand_leng_expres'] : null);
$celf58_percent_leng_expres = getFloatOrNull(isset($_POST['celf58_percent_leng_expres']) ? $_POST['celf58_percent_leng_expres'] : null);
$celf58_leng_expr_interpre = getStringOrNull(isset($_POST['celf58_leng_expr_interpre']) ? $_POST['celf58_leng_expr_interpre'] : null);
$celf58_stand_contenido = getIntOrNull(isset($_POST['celf58_stand_contenido']) ? $_POST['celf58_stand_contenido'] : null);
$celf58_percent_conteni = getFloatOrNull(isset($_POST['celf58_percent_conteni']) ? $_POST['celf58_percent_conteni'] : null);
$celf58_contenido_interpretacion = getStringOrNull(isset($_POST['celf58_contenido_interpretacion']) ? $_POST['celf58_contenido_interpretacion'] : null);
$celf58_stand_estrucct = getIntOrNull(isset($_POST['celf58_stand_estrucct']) ? $_POST['celf58_stand_estrucct'] : null);
$celf58_percent_estrucc = getFloatOrNull(isset($_POST['celf58_percent_estrucc']) ? $_POST['celf58_percent_estrucc'] : null);
$celf58_estrucct_interpret = getStringOrNull(isset($_POST['celf58_estrucct_interpret']) ? $_POST['celf58_estrucct_interpret'] : null);
$celf58_stand_memor_dtraba = getIntOrNull(isset($_POST['celf58_stand_memor_dtraba']) ? $_POST['celf58_stand_memor_dtraba'] : null);
$celf58_percent_memor_dtrab = getFloatOrNull(isset($_POST['celf58_percent_memor_dtrab']) ? $_POST['celf58_percent_memor_dtrab'] : null);
$celf58_memori_traba_interpre = getStringOrNull(isset($_POST['celf58_memori_traba_interpre']) ? $_POST['celf58_memori_traba_interpre'] : null);
$dat_clin_refera_ter = getStringOrNull(isset($_POST['dat_clin_refera_ter']) ? $_POST['dat_clin_refera_ter'] : null);
$dat_clin_obser_clinic = getStringOrNull(isset($_POST['dat_clin_obser_clinic']) ? $_POST['dat_clin_obser_clinic'] : null);
$dat_clin_otr_obser = getStringOrNull(isset($_POST['dat_clin_otr_obser']) ? $_POST['dat_clin_otr_obser'] : null);

// --- Bloque B: Subpruebas ---
$sub_con_sigui_dir_brut = getIntOrNull(isset($_POST['sub_con_sigui_dir_brut']) ? $_POST['sub_con_sigui_dir_brut'] : null);
$sub_con_sigui_dir_esc = getIntOrNull(isset($_POST['sub_con_sigui_dir_esc']) ? $_POST['sub_con_sigui_dir_esc'] : null);
$sub_con_sigui_dir_perce = getFloatOrNull(isset($_POST['sub_con_sigui_dir_perce']) ? $_POST['sub_con_sigui_dir_perce'] : null);
$sub_con_sigui_dir_interp = getStringOrNull(isset($_POST['sub_con_sigui_dir_interp']) ? $_POST['sub_con_sigui_dir_interp'] : null);
$sub_recor_pala_brut = getIntOrNull(isset($_POST['sub_recor_pala_brut']) ? $_POST['sub_recor_pala_brut'] : null);
$sub_recor_pala_esca = getIntOrNull(isset($_POST['sub_recor_pala_esca']) ? $_POST['sub_recor_pala_esca'] : null);
$sub_recor_pala_percen = getFloatOrNull(isset($_POST['sub_recor_pala_percen']) ? $_POST['sub_recor_pala_percen'] : null);
$sub_recor_pala_interp = getStringOrNull(isset($_POST['sub_recor_pala_interp']) ? $_POST['sub_recor_pala_interp'] : null);
$sub_recor_orac_brut = getIntOrNull(isset($_POST['sub_recor_orac_brut']) ? $_POST['sub_recor_orac_brut'] : null);
$sub_recor_orac_esca = getIntOrNull(isset($_POST['sub_recor_orac_esca']) ? $_POST['sub_recor_orac_esca'] : null);
$sub_recor_orac_perce = getFloatOrNull(isset($_POST['sub_recor_orac_perce']) ? $_POST['sub_recor_orac_perce'] : null);
$sub_recor_orac_interpr = getStringOrNull(isset($_POST['sub_recor_orac_interpr']) ? $_POST['sub_recor_orac_interpr'] : null);
$sub_form_oraci_brut = getIntOrNull(isset($_POST['sub_form_oraci_brut']) ? $_POST['sub_form_oraci_brut'] : null);
$sub_form_oraci_esca = getIntOrNull(isset($_POST['sub_form_oraci_esca']) ? $_POST['sub_form_oraci_esca'] : null);
$sub_form_oraci_percen = getFloatOrNull(isset($_POST['sub_form_oraci_percen']) ? $_POST['sub_form_oraci_percen'] : null);
$sub_form_oraci_interpr = getStringOrNull(isset($_POST['sub_form_oraci_interpr']) ? $_POST['sub_form_oraci_interpr'] : null);
$sub_clas_palab_recep = getIntOrNull(isset($_POST['sub_clas_palab_recep']) ? $_POST['sub_clas_palab_recep'] : null);
$sub_clas_palab_esca = getIntOrNull(isset($_POST['sub_clas_palab_esca']) ? $_POST['sub_clas_palab_esca'] : null);
$sub_clas_palab_percent = getFloatOrNull(isset($_POST['sub_clas_palab_percent']) ? $_POST['sub_clas_palab_percent'] : null);
$sub_clas_palab_interp = getStringOrNull(isset($_POST['sub_clas_palab_interp']) ? $_POST['sub_clas_palab_interp'] : null);
$sub_clas_pala_exprex_brut = getIntOrNull(isset($_POST['sub_clas_pala_exprex_brut']) ? $_POST['sub_clas_pala_exprex_brut'] : null);
$sub_clas_pala_exprex_esc = getIntOrNull(isset($_POST['sub_clas_pala_exprex_esc']) ? $_POST['sub_clas_pala_exprex_esc'] : null);
$sub_clas_pala_exprex_percen = getFloatOrNull(isset($_POST['sub_clas_pala_exprex_percen']) ? $_POST['sub_clas_pala_exprex_percen'] : null);
$sub_clas_pala_exprex_interp = getStringOrNull(isset($_POST['sub_clas_pala_exprex_interp']) ? $_POST['sub_clas_pala_exprex_interp'] : null);
$sub_clas_palab_tot_brut = getIntOrNull(isset($_POST['sub_clas_palab_tot_brut']) ? $_POST['sub_clas_palab_tot_brut'] : null);
$sub_clas_palab_suma_escalares = getIntOrNull(isset($_POST['sub_clas_palab_suma_escalares']) ? $_POST['sub_clas_palab_suma_escalares'] : null);
$sub_clas_palab_tot_esc = getIntOrNull(isset($_POST['sub_clas_palab_tot_esc']) ? $_POST['sub_clas_palab_tot_esc'] : null);
$sub_clas_palab_tot_percen = getFloatOrNull(isset($_POST['sub_clas_palab_tot_percen']) ? $_POST['sub_clas_palab_tot_percen'] : null);
$sub_clas_pala_tot_inter = getStringOrNull(isset($_POST['sub_clas_pala_tot_inter']) ? $_POST['sub_clas_pala_tot_inter'] : null);
$sub_esctr_orac_brut = getIntOrNull(isset($_POST['sub_esctr_orac_brut']) ? $_POST['sub_esctr_orac_brut'] : null);
$sub_esctr_orac_esc = getIntOrNull(isset($_POST['sub_esctr_orac_esc']) ? $_POST['sub_esctr_orac_esc'] : null);
$sub_esctr_orac_percen = getFloatOrNull(isset($_POST['sub_esctr_orac_percen']) ? $_POST['sub_esctr_orac_percen'] : null);
$sub_esctr_orac_interpr = getStringOrNull(isset($_POST['sub_esctr_orac_interpr']) ? $_POST['sub_esctr_orac_interpr'] : null);
$vocab_expre_brut = getIntOrNull(isset($_POST['vocab_expre_brut']) ? $_POST['vocab_expre_brut'] : null);
$vocab_expre_esc = getIntOrNull(isset($_POST['vocab_expre_esc']) ? $_POST['vocab_expre_esc'] : null);
$vocab_expre_percen = getFloatOrNull(isset($_POST['vocab_expre_percen']) ? $_POST['vocab_expre_percen'] : null);
$vocab_expre_interp = getStringOrNull(isset($_POST['vocab_expre_interp']) ? $_POST['vocab_expre_interp'] : null);
$sub_enten_parraf_brut = getIntOrNull(isset($_POST['sub_enten_parraf_brut']) ? $_POST['sub_enten_parraf_brut'] : null);
$sub_enten_parraf_esca = getIntOrNull(isset($_POST['sub_enten_parraf_esca']) ? $_POST['sub_enten_parraf_esca'] : null);
$sub_enten_parraf_perce = getFloatOrNull(isset($_POST['sub_enten_parraf_perce']) ? $_POST['sub_enten_parraf_perce'] : null);
$sub_enten_parraf_interp = getStringOrNull(isset($_POST['sub_enten_parraf_interp']) ? $_POST['sub_enten_parraf_interp'] : null);
$sub_rep_num_forw_brut = getIntOrNull(isset($_POST['sub_rep_num_forw_brut']) ? $_POST['sub_rep_num_forw_brut'] : null);
$sub_rep_num_forw_esc = getIntOrNull(isset($_POST['sub_rep_num_forw_esc']) ? $_POST['sub_rep_num_forw_esc'] : null);
$sub_rep_num_forw_perc = getFloatOrNull(isset($_POST['sub_rep_num_forw_perc']) ? $_POST['sub_rep_num_forw_perc'] : null);
$sub_rep_num_forw_inter = getStringOrNull(isset($_POST['sub_rep_num_forw_inter']) ? $_POST['sub_rep_num_forw_inter'] : null);
$sub_rep_num_back_brut = getIntOrNull(isset($_POST['sub_rep_num_back_brut']) ? $_POST['sub_rep_num_back_brut'] : null);
$sub_rep_num_back_esc = getIntOrNull(isset($_POST['sub_rep_num_back_esc']) ? $_POST['sub_rep_num_back_esc'] : null);
$sub_rep_num_back_perce = getFloatOrNull(isset($_POST['sub_rep_num_back_perce']) ? $_POST['sub_rep_num_back_perce'] : null);
$sub_rep_num_back_interp = getStringOrNull(isset($_POST['sub_rep_num_back_interp']) ? $_POST['sub_rep_num_back_interp'] : null);
$sub_rep_num_tot_brut = getIntOrNull(isset($_POST['sub_rep_num_tot_brut']) ? $_POST['sub_rep_num_tot_brut'] : null);
$sub_rep_num_tot_esc = getIntOrNull(isset($_POST['sub_rep_num_tot_esc']) ? $_POST['sub_rep_num_tot_esc'] : null);
$sub_rep_num_tot_perc = getFloatOrNull(isset($_POST['sub_rep_num_tot_perc']) ? $_POST['sub_rep_num_tot_perc'] : null);
$sub_rep_num_tot_int = getStringOrNull(isset($_POST['sub_rep_num_tot_int']) ? $_POST['sub_rep_num_tot_int'] : null);
$sub_sec_fam1_esc = getIntOrNull(isset($_POST['sub_sec_fam1_esc']) ? $_POST['sub_sec_fam1_esc'] : null);
$sub_sec_fam1_brut = getIntOrNull(isset($_POST['sub_sec_fam1_brut']) ? $_POST['sub_sec_fam1_brut'] : null);
$sub_sec_fam1_percen = getFloatOrNull(isset($_POST['sub_sec_fam1_percen']) ? $_POST['sub_sec_fam1_percen'] : null);
$sub_sec_fam1_interp = getStringOrNull(isset($_POST['sub_sec_fam1_interp']) ? $_POST['sub_sec_fam1_interp'] : null);

// Validación
if (empty($fecha_evaluacion) || empty($edad)) {
    header("Location: UCELF5-8.php?id=" . urlencode($id) . "&n=celf58_missing_data_update");
    exit;
}

include("../Php/Conexion.php");
$Con = Conectar();
if (!$Con) {
    header("Location: UCELF5-8.php?id=" . urlencode($id) . "&n=celf58_db_conn_error_update");
    exit;
}

// ===================================================================================
// --- 5. CONSULTA UPDATE REORDENADA ---
// ===================================================================================
$SQL  = "UPDATE celf58 SET 
    /* Cabecera */
    fecha_evaluacion=?, edad=?, rango_edad=?, 

    /* BLOQUE B: Subpruebas (Ahora van primero en la lógica) */
    sub_con_sigui_dir_brut=?, sub_con_sigui_dir_esc=?, sub_con_sigui_dir_perce=?, sub_con_sigui_dir_interp=?,
    sub_recor_pala_brut=?, sub_recor_pala_esca=?, sub_recor_pala_percen=?, sub_recor_pala_interp=?,
    sub_recor_orac_brut=?, sub_recor_orac_esca=?, sub_recor_orac_perce=?, sub_recor_orac_interpr=?,
    sub_form_oraci_brut=?, sub_form_oraci_esca=?, sub_form_oraci_percen=?, sub_form_oraci_interpr=?,
    sub_clas_palab_recep=?, sub_clas_palab_esca=?, sub_clas_palab_percent=?, sub_clas_palab_interp=?,
    sub_clas_pala_exprex_brut=?, sub_clas_pala_exprex_esc=?, sub_clas_pala_exprex_percen=?, sub_clas_pala_exprex_interp=?,
    sub_clas_palab_tot_brut=?, sub_clas_palab_suma_escalares=?, sub_clas_palab_tot_esc=?, sub_clas_palab_tot_percen=?, sub_clas_pala_tot_inter=?,
    sub_esctr_orac_brut=?, sub_esctr_orac_esc=?, sub_esctr_orac_percen=?, sub_esctr_orac_interpr=?,
    vocab_expre_brut=?, vocab_expre_esc=?, vocab_expre_percen=?, vocab_expre_interp=?,
    sub_enten_parraf_brut=?, sub_enten_parraf_esca=?, sub_enten_parraf_perce=?, sub_enten_parraf_interp=?,
    sub_rep_num_forw_brut=?, sub_rep_num_forw_esc=?, sub_rep_num_forw_perc=?, sub_rep_num_forw_inter=?,
    sub_rep_num_back_brut=?, sub_rep_num_back_esc=?, sub_rep_num_back_perce=?, sub_rep_num_back_interp=?,
    sub_rep_num_tot_brut=?, sub_rep_num_tot_esc=?, sub_rep_num_tot_perc=?, sub_rep_num_tot_int=?,
    sub_sec_fam1_esc=?, sub_sec_fam1_brut=?, sub_sec_fam1_percen=?, sub_sec_fam1_interp=?,

    /* BLOQUE A: Core y Clínicos (Ahora van después) */
    celf58_stand_lengu_total=?, celf58_percent_lengua_tota=?, celf58_leng_tot_interpr=?,
    celf58_stand_leng_recep=?, celf58_percent_leng_recept=?, celf58_leng_recep_inter=?,
    celf58_stand_leng_expres=?, celf58_percent_leng_expres=?, celf58_leng_expr_interpre=?,
    celf58_stand_contenido=?, celf58_percent_conteni=?, celf58_contenido_interpretacion=?,
    celf58_stand_estrucct=?, celf58_percent_estrucc=?, celf58_estrucct_interpret=?,
    celf58_stand_memor_dtraba=?, celf58_percent_memor_dtrab=?, celf58_memori_traba_interpre=?,
    dat_clin_refera_ter=?, dat_clin_obser_clinic=?, dat_clin_otr_obser=?

    WHERE id=?"; 

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

if ($stmt) {
    // 6. Tipos Reordenados
    // sss (Cabecera) + Bloque B (Subpruebas) + Bloque A (Core) + i (ID)
    $tipos = "sss" . 
             "iids" . "iids" . "iids" . "iids" . "iids" . "iids" . "iiids" . "iids" . "iids" . "iids" . "iids" . "iids" . "iids" . "iids" .
             "ids" . "ids" . "ids" . "ids" . "ids" . "ids" . "sss" .
             "i";

    // 7. Vinculación Reordenada
    mysqli_stmt_bind_param($stmt, $tipos,
        // Cabecera
        $fecha_evaluacion, $edad, $rango_edad, 

        // BLOQUE B (Subpruebas)
        $sub_con_sigui_dir_brut, $sub_con_sigui_dir_esc, $sub_con_sigui_dir_perce, $sub_con_sigui_dir_interp,
        $sub_recor_pala_brut, $sub_recor_pala_esca, $sub_recor_pala_percen, $sub_recor_pala_interp,
        $sub_recor_orac_brut, $sub_recor_orac_esca, $sub_recor_orac_perce, $sub_recor_orac_interpr,
        $sub_form_oraci_brut, $sub_form_oraci_esca, $sub_form_oraci_percen, $sub_form_oraci_interpr,
        $sub_clas_palab_recep, $sub_clas_palab_esca, $sub_clas_palab_percent, $sub_clas_palab_interp,
        $sub_clas_pala_exprex_brut, $sub_clas_pala_exprex_esc, $sub_clas_pala_exprex_percen, $sub_clas_pala_exprex_interp,
        $sub_clas_palab_tot_brut, $sub_clas_palab_suma_escalares, $sub_clas_palab_tot_esc, $sub_clas_palab_tot_percen, $sub_clas_pala_tot_inter,
        $sub_esctr_orac_brut, $sub_esctr_orac_esc, $sub_esctr_orac_percen, $sub_esctr_orac_interpr,
        $vocab_expre_brut, $vocab_expre_esc, $vocab_expre_percen, $vocab_expre_interp,
        $sub_enten_parraf_brut, $sub_enten_parraf_esca, $sub_enten_parraf_perce, $sub_enten_parraf_interp,
        $sub_rep_num_forw_brut, $sub_rep_num_forw_esc, $sub_rep_num_forw_perc, $sub_rep_num_forw_inter,
        $sub_rep_num_back_brut, $sub_rep_num_back_esc, $sub_rep_num_back_perce, $sub_rep_num_back_interp,
        $sub_rep_num_tot_brut, $sub_rep_num_tot_esc, $sub_rep_num_tot_perc, $sub_rep_num_tot_int,
        $sub_sec_fam1_esc, $sub_sec_fam1_brut, $sub_sec_fam1_percen, $sub_sec_fam1_interp,
        
        // BLOQUE A (Core/Clínicos)
        $celf58_stand_lengu_total, $celf58_percent_lengua_tota, $celf58_leng_tot_interpr,
        $celf58_stand_leng_recep, $celf58_percent_leng_recept, $celf58_leng_recep_inter,
        $celf58_stand_leng_expres, $celf58_percent_leng_expres, $celf58_leng_expr_interpre,
        $celf58_stand_contenido, $celf58_percent_conteni, $celf58_contenido_interpretacion,
        $celf58_stand_estrucct, $celf58_percent_estrucc, $celf58_estrucct_interpret,
        $celf58_stand_memor_dtraba, $celf58_percent_memor_dtrab, $celf58_memori_traba_interpre,
        $dat_clin_refera_ter, $dat_clin_obser_clinic, $dat_clin_otr_obser,
        
        // WHERE ID
        $id 
    );

    if (mysqli_stmt_execute($stmt)) {
        header("Location: UCELF5-8.php?m=celf58_update_success");
    } else {
        error_log("USCELF5-8.php - Error al ejecutar para ID $id: " . mysqli_stmt_error($stmt));
        header("Location: UCELF5-8.php?id=" . urlencode($id) . "&n=celf58_update_failed_execute");
    }
} else {
    error_log("USCELF5-8.php - Error al preparar UPDATE: " . mysqli_error($Con));
    header("Location: UCELF5-8.php?id=" . urlencode($id) . "&n=celf58_prepare_failed");
}
mysqli_stmt_close($stmt);
Cerrar($Con);
exit;
?>