<?php
// controlador/bastoneras_controller.php
ini_set('display_errors', 1);
error_reporting(E_ALL);
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Validación de seguridad de sesión (Únicamente para personal administrativo/usuarios autorizados)
if (!isset($_SESSION['usu_id'])) {
    header('Content-Type: application/json');
    echo json_encode(["status" => "error", "message" => "Sesión inválida, expirada o permisos insuficientes."]);
    exit();
}

require_once "../modelo/Db.php";
$bd = new clsbdd(); 
$action = $_GET['action'] ?? '';


// --- ACCIÓN: CAMBIAR ESTADO (VÍA FETCH/AJAX) ---
if ($action === 'cambiar_estado') {
    // Limpiar cualquier salida previa y forzar JSON
    if (ob_get_length()) ob_clean();
    header('Content-Type: application/json; charset=utf-8');
    
    $bas_id = isset($_GET['bas_id']) ? intval($_GET['bas_id']) : 0;
    $bas_estado = isset($_GET['bas_estado']) ? intval($_GET['bas_estado']) : -1;
    // 1. Recuperar el cla_id enviado desde el Fetch de JavaScript
    $cla_id = isset($_GET['cla_id']) && $_GET['cla_id'] !== '' ? intval($_GET['cla_id']) : null;

    if ($bas_id > 0 && ($bas_estado === 0 || $bas_estado === 1)) {
        
        // 2. Si el estado es Activo (1) y viene un cla_id, lo incluimos en el UPDATE. 
        // Si es Inactivo (0), mantenemos el cla_id actual o lo que requiera tu lógica.
        if ($bas_estado === 1 && $cla_id !== null) {
            $sql = "UPDATE bas_bastoneras SET bas_estado = $bas_estado, cla_id = $cla_id WHERE bas_id = $bas_id";
        } else {
            $sql = "UPDATE bas_bastoneras SET bas_estado = $bas_estado WHERE bas_id = $bas_id";
        }

        if ($bd->ejecutar($sql)) {
            // 3. Opcional/Recomendado: Obtener el texto de la categoría para que JS refresque la celda en tiempo real
            $categoria_texto = "";
            if ($bas_estado === 1 && $cla_id !== null) {
                $sql_c = "SELECT cla_categoria, cla_nivel FROM bas_clasificaciones WHERE cla_id = $cla_id LIMIT 1";
                $res_c = $bd->ejecutar($sql_c);
                if ($res_c && $res_c->num_rows > 0) {
                    $c = $res_c->fetch_assoc();
                    $categoria_texto = $c['cla_categoria'] . " - " . $c['cla_nivel'];
                }
            }

            echo json_encode([
                "status" => "success", 
                "message" => "Estado actualizado.",
                "categoria_texto" => $categoria_texto // Esto alimenta tu JS para pintar la estrella dorada inmediatamente
            ]);
        } else {
            echo json_encode(["status" => "error", "message" => "Error al actualizar la base de datos."]);
        }
    } else {
        echo json_encode(["status" => "error", "message" => "Parámetros inválidos."]);
    }
    exit(); // IMPORTANTE: Detiene la ejecución aquí para no cargar el HTML
}

// ACCIÓN: CONSULTAR DATOS (RETORNA JSON PARA LA FICHA RÁPIDA O EDICIÓN)
if ($action === 'consultar') {
    // Forzar cabecera JSON limpia sin interferencias
    header('Content-Type: application/json; charset=utf-8');
    
    $bas_id = isset($_GET['bas_id']) ? intval($_GET['bas_id']) : 0;
    
    if ($bas_id <= 0) {
        echo json_encode(["status" => "error", "message" => "ID de alumna no válido."]);
        exit();
    }
    
    $bd = new clsbdd();
    
    // Consulta limpia cruzando la tabla de bastoneras con clasificaciones (incluye campos de foto y ubicación)
    $sql = "SELECT b.*, c.cla_categoria, c.cla_nivel 
            FROM bas_bastoneras b 
            LEFT JOIN bas_clasificaciones c ON b.cla_id = c.cla_id 
            WHERE b.bas_id = $bas_id 
            LIMIT 1";
            
    $res = $bd->ejecutar($sql);
    
    if ($res && $res->num_rows > 0) {
        $row = $res->fetch_assoc();
        echo json_encode(["status" => "success", "data" => $row]);
    } else {
        echo json_encode(["status" => "error", "message" => "La alumna no fue localizada en la base de datos."]);
    }
    exit();
}

// --- ACCIÓN: GUARDAR / ACTUALIZAR EN BastoneraController.php ---
if ($action === 'guardar' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $bd = new clsbdd();
    
    $bas_id           = !empty($_POST['bas_id']) ? intval($_POST['bas_id']) : null;
    $cedula           = isset($_POST['bas_cedula']) ? trim($_POST['bas_cedula']) : '';
    $nombres          = isset($_POST['bas_nombres']) ? strtoupper(trim($_POST['bas_nombres'])) : '';
    $apellidos        = isset($_POST['bas_apellidos']) ? strtoupper(trim($_POST['bas_apellidos'])) : '';
    $cla_id           = !empty($_POST['cla_id']) ? intval($_POST['cla_id']) : null;
    
    $fecha_nac        = !empty($_POST['bas_fecha_nacimiento']) ? trim($_POST['bas_fecha_nacimiento']) : null;
    $telefono         = !empty($_POST['bas_telefono']) ? trim($_POST['bas_telefono']) : null;
    $correo           = !empty($_POST['bas_correo']) ? trim($_POST['bas_correo']) : null;
    $fecha_ing        = !empty($_POST['bas_fecha_ingreso']) ? trim($_POST['bas_fecha_ingreso']) : null;
    $estado           = isset($_POST['bas_estado']) ? intval($_POST['bas_estado']) : 1;
    
    $rep_nombre       = !empty($_POST['bas_rep_nombre']) ? strtoupper(trim($_POST['bas_rep_nombre'])) : null;
    $rep_cedula       = !empty($_POST['bas_rep_cedula']) ? trim($_POST['bas_rep_cedula']) : null;
    $rep_telefono     = !empty($_POST['bas_rep_telefono']) ? trim($_POST['bas_rep_telefono']) : null;
    
    $tipo_sangre      = !empty($_POST['bas_tipo_sangre']) ? strtoupper(trim($_POST['bas_tipo_sangre'])) : null;
    $estatura_cm      = !empty($_POST['bas_estatura_cm']) ? intval($_POST['bas_estatura_cm']) : null;
    $peso_kg          = !empty($_POST['bas_peso_kg']) ? floatval($_POST['bas_peso_kg']) : null;
    $alergias         = !empty($_POST['bas_alergias_lesiones']) ? trim($_POST['bas_alergias_lesiones']) : null;

    $ubicacion        = !empty($_POST['bas_direccion']) ? trim($_POST['bas_direccion']) : null;
    $coordenadas      = !empty($_POST['bas_coordenadas']) ? trim($_POST['bas_coordenadas']) : null;

    if (!empty($cedula) && !empty($nombres) && !empty($apellidos)) {
        
        // Sanitización y escape de datos seguros
        $cedulaEsc        = $bd->esc($cedula);
        $nombresEsc       = $bd->esc($nombres);
        $apellidosEsc     = $bd->esc($apellidos);
        $claVal           = ($cla_id !== null) ? $cla_id : "NULL";
        
        $fechaNacVal      = ($fecha_nac !== null) ? "'" . $bd->esc($fecha_nac) . "'" : "NULL";
        $telefonoVal      = ($telefono !== null) ? "'" . $bd->esc($telefono) . "'" : "NULL";
        $correoVal        = ($correo !== null) ? "'" . $bd->esc($correo) . "'" : "NULL";
        $fechaIngVal      = ($fecha_ing !== null) ? "'" . $bd->esc($fecha_ing) . "'" : "NULL";
        
        $repNombreVal     = ($rep_nombre !== null) ? "'" . $bd->esc($rep_nombre) . "'" : "NULL";
        $repCedulaVal     = ($rep_cedula !== null) ? "'" . $bd->esc($rep_cedula) . "'" : "NULL";
        $repTelVal        = ($rep_telefono !== null) ? "'" . $bd->esc($rep_telefono) . "'" : "NULL";
        
        $sangreVal        = ($tipo_sangre !== null) ? "'" . $bd->esc($tipo_sangre) . "'" : "NULL";
        $estaturaVal      = ($estatura_cm !== null) ? $estatura_cm : "NULL";
        $pesoVal          = ($peso_kg !== null) ? $peso_kg : "NULL";
        $alergiasEsc      = ($alergias !== null) ? "'" . $bd->esc($alergias) . "'" : "NULL";

        $ubicacionVal     = ($ubicacion !== null) ? "'" . $bd->esc($ubicacion) . "'" : "NULL";
        $coordenadasVal   = ($coordenadas !== null) ? "'" . $bd->esc($coordenadas) . "'" : "NULL";

        // --- ENRUTAMIENTO DINÁMICO DE IMAGENES ---
        $foto_nombre = null;
        $directorio_destino = dirname(__DIR__) . "/assets/img/fotosbastoneras/";

        // Validamos si el archivo fue enviado y no contiene errores de subida
        if (isset($_FILES['bas_foto']) && $_FILES['bas_foto']['error'] === UPLOAD_ERR_OK) {
            $file_tmp  = $_FILES['bas_foto']['tmp_name'];
            $file_name = $_FILES['bas_foto']['name'];
            $file_ext  = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
            
            $extensiones_permitidas = ['jpg', 'jpeg', 'png', 'webp'];

            if (in_array($file_ext, $extensiones_permitidas)) {
                if (!is_dir($directorio_destino)) {
                    mkdir($directorio_destino, 0755, true);
                }

                // Generación de identificador único con la cédula ya sanitizada
                $foto_nombre = "bastonera_" . $cedulaEsc . "_" . uniqid() . "." . $file_ext;
                $ruta_final = $directorio_destino . $foto_nombre;

                if (!move_uploaded_file($file_tmp, $ruta_final)) {
                    $foto_nombre = null; 
                }
            }
        }

        if ($bas_id === null) {
            // TRANSACCIÓN: INSERTAR NUEVA ALUMNA
            $fotoVal = ($foto_nombre !== null) ? "'" . $bd->esc($foto_nombre) . "'" : "NULL";

            $sql = "INSERT INTO bas_bastoneras (
                        bas_cedula, bas_nombres, bas_apellidos, bas_fecha_nacimiento,
                        bas_telefono, bas_correo, cla_id, bas_fecha_ingreso, bas_estado,
                        bas_rep_nombre, bas_rep_cedula, bas_rep_telefono,
                        bas_tipo_sangre, bas_estatura_cm, bas_peso_kg, bas_alergias_lesiones,
                        bas_foto, bas_direccion, bas_coordenadas
                    ) VALUES (
                        '$cedulaEsc', '$nombresEsc', '$apellidosEsc', $fechaNacVal,
                        $telefonoVal, $correoVal, $claVal, $fechaIngVal, $estado,
                        $repNombreVal, $repCedulaVal, $repTelVal,
                        $sangreVal, $estaturaVal, $pesoVal, $alergiasEsc,
                        $fotoVal, $ubicacionVal, $coordenadasVal
                    )";
        } else {
            // TRANSACCIÓN: EDITAR REGISTRO EXISTENTE
            if ($foto_nombre !== null) {
                // Eliminar archivo físico anterior si se sube un reemplazo
                $sql_foto_vieja = "SELECT bas_foto FROM bas_bastoneras WHERE bas_id = $bas_id LIMIT 1";
                $res_foto = $bd->ejecutar($sql_foto_vieja);
                if ($res_foto && $res_foto->num_rows > 0) {
                    $row_foto = $res_foto->fetch_assoc();
                    $foto_anterior = $row_foto['bas_foto'];
                    
                    if (!empty($foto_anterior)) {
                        $archivo_antiguo = $directorio_destino . $foto_anterior;
                        if (file_exists($archivo_antiguo)) {
                            unlink($archivo_antiguo);
                        }
                    }
                }
                $foto_sql_update = "bas_foto = '" . $bd->esc($foto_nombre) . "',";
            } else {
                $foto_sql_update = ""; // Evita sobrescribir con NULL si no se selecciona nueva foto
            }

            $sql = "UPDATE bas_bastoneras SET 
                        bas_cedula = '$cedulaEsc', 
                        bas_nombres = '$nombresEsc', 
                        bas_apellidos = '$apellidosEsc', 
                        bas_fecha_nacimiento = $fechaNacVal, 
                        bas_telefono = $telefonoVal,
                        bas_correo = $correoVal,
                        cla_id = $claVal, 
                        bas_fecha_ingreso = $fechaIngVal, 
                        bas_estado = $estado,
                        bas_rep_nombre = $repNombreVal, 
                        bas_rep_cedula = $repCedulaVal, 
                        bas_rep_telefono = $repTelVal, 
                        bas_tipo_sangre = $sangreVal, 
                        bas_estatura_cm = $estaturaVal, 
                        bas_peso_kg = $pesoVal, 
                        bas_alergias_lesiones = $alergiasEsc,
                        $foto_sql_update
                        bas_direccion = $ubicacionVal,
                        bas_coordenadas = $coordenadasVal
                    WHERE bas_id = $bas_id";
        }

        // --- RETORNO COMPATIBLE CON TRADICIONAL Y FETCH ---
        if ($bd->ejecutar($sql)) {
            if (isset($_GET['ajax']) || isset($_POST['ajax'])) {
                if (ob_get_length()) ob_clean();
                header('Content-Type: application/json');
                echo json_encode(["status" => "success", "message" => "Guardado exitoso."]);
                exit();
            }
            header("Location: ../index.php?page=bastoneras/listar&status=success");
        } else {
            if (isset($_GET['ajax']) || isset($_POST['ajax'])) {
                if (ob_get_length()) ob_clean();
                header('Content-Type: application/json');
                echo json_encode(["status" => "error", "message" => "Fallo interno de Base de Datos."]);
                exit();
            }
            header("Location: ../index.php?page=bastoneras/listar&status=error&error=db_fail");
        }
        exit();
    } else {
        if (isset($_GET['ajax']) || isset($_POST['ajax'])) {
            if (ob_get_length()) ob_clean();
            header('Content-Type: application/json');
            echo json_encode(["status" => "error", "message" => "Identificación y Nombres obligatorios."]);
            exit();
        }
        header("Location: ../index.php?page=bastoneras/listar&status=error&error=campos_vacios");
        exit();
    }
}

// ACCIÓN NO ENCONTRADA / ACCESO DEFECTUOSO
header("Location: ../index.php?page=bastoneras/listar");
exit();
?>