<?php
// controlador/asistencia_ajax.php

// 1. FORZAR VISIBILIDAD DE ERRORES PARA DIAGNÓSTICO
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Configurar un archivo de log local en la misma carpeta por si acaso
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/errores_asistencia.log');

header('Content-Type: application/json; charset=utf-8');
session_start();

require_once "../modelo/Db.php"; // Asegúrate de que la ruta a tu Db.php sea correcta

$db = new clsbdd();

try {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('Método de petición no permitido.');
    }

    $fecha = $_POST['fecha'] ?? '';
    $bas_id = (int)($_POST['bas_id'] ?? 0);
    $estado = strtoupper($_POST['estado'] ?? '');
    $observacion = $_POST['observacion'] ?? '';

    if (empty($fecha) || $bas_id <= 0 || empty($estado)) {
        throw new Exception('Datos recibidos incompletos.');
    }

    $fecha_limpia = $db->esc($fecha);
    $observacion_limpia = $db->esc($observacion);

    // Guardar o actualizar la asistencia
    $sql_check = "SELECT asi_id FROM bas_asistencia WHERE bas_id = $bas_id AND asi_fecha = '$fecha_limpia'";
    $res_check = $db->ejecutar($sql_check);

    if (!$res_check) {
        throw new Exception('Error al consultar la tabla bas_asistencia.');
    }

    if ($res_check->num_rows > 0) {
        $sql_action = "UPDATE bas_asistencia 
                       SET asi_estado = '$estado', asi_observaciones = '$observacion_limpia' 
                       WHERE bas_id = $bas_id AND asi_fecha = '$fecha_limpia'";
    } else {
        $sql_action = "INSERT INTO bas_asistencia (bas_id, asi_fecha, asi_estado, asi_observaciones) 
                       VALUES ($bas_id, '$fecha_limpia', '$estado', '$observacion_limpia')";
    }

    $ejecucion = $db->ejecutar($sql_action);

    if (!$ejecucion) {
        throw new Exception('Error crítico al ejecutar la inserción/actualización de asistencia.');
    }

    // Buscar datos de contacto para retornar al navegador
    $sql_rep = "SELECT bas_nombres, bas_apellidos, bas_rep_nombre, bas_rep_telefono 
                FROM bas_bastoneras WHERE bas_id = $bas_id";
    $res_rep = $db->ejecutar($sql_rep);
    $row_r = ($res_rep) ? $res_rep->fetch_assoc() : [];

    echo json_encode([
        'status' => 'success',
        'estado' => $estado,
        'alumna' => trim(($row_r['bas_nombres'] ?? '') . ' ' . ($row_r['bas_apellidos'] ?? '')),
        'rep_nombre' => $row_r['bas_rep_nombre'] ?? 'Representante',
        'rep_telefono' => preg_replace('/[^0-9]/', '', $row_r['bas_rep_telefono'] ?? '')
    ]);

} catch (Exception $e) {
    // Si algo falla, devolvemos un JSON bien estructurado informando el porqué exacto
    http_response_code(500);
    echo json_encode([
        'status' => 'error',
        'message' => $e->getMessage()
    ]);
}