<?php
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/system_logger.php';
session_start();
header('Content-Type: application/json');

$logger = SystemLogger::getInstance();

// Validar usuario
if (!isset($_SESSION['user_id'])) {
    $logger->warning('Intento de actualizar entrevista sin autenticación', 'IP: ' . ($_SERVER['REMOTE_ADDR'] ?? 'N/A'));
    http_response_code(401);
    echo json_encode(['success' => false, 'msg' => 'No autenticado']);
    exit;
}

$data = json_decode(file_get_contents('php://input'), true);

$id = $data['id'] ?? null;
$motivo = $data['motivo'] ?? null;
$observaciones = $data['observaciones'] ?? null;
$acuerdos = $data['acuerdos_compromisos'] ?? null;
$derivacion = $data['derivacion'] ?? null;
$institucion_derivada = $data['institucion_derivada'] ?? null;
$usuario_modificacion = $_SESSION['user_id'];

if (!$id || !$motivo) {
    $logger->warning('Intento de actualizar entrevista con datos incompletos', "Usuario ID: {$_SESSION['user_id']}, Entrevista ID: $id");
    echo json_encode(['success' => false, 'msg' => 'Faltan datos obligatorios (ID y Motivo).']);
    exit;
}

try {
    // Obtener datos antes de la actualización para el log
    $stmt_antes = $pdo->prepare("
        SELECT 
            e.motivo as motivo_anterior,
            CONCAT(a.nombre, ' ', a.ap_paterno, ' ', a.ap_materno) as alumno_nombre,
            a.run as alumno_run,
            CONCAT(f.nombre, ' ', f.ap_paterno, ' ', f.ap_materno) as familiar_nombre
        FROM entrevistas_apoderados e
        JOIN alumnos a ON e.alumno_id = a.id
        JOIN familiares f ON e.familiar_id = f.id
        WHERE e.id = ?
    ");
    $stmt_antes->execute([$id]);
    $datos_antes = $stmt_antes->fetch(PDO::FETCH_ASSOC);

    $sql = "UPDATE entrevistas_apoderados SET 
                motivo = :motivo, 
                observaciones = :observaciones, 
                acuerdos_compromisos = :acuerdos,
                derivacion = :derivacion,
                institucion_derivada = :institucion_derivada,
                usuario_modificacion = :usuario_modificacion,
                fecha_modificacion = NOW()
            WHERE id = :id";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':id' => $id,
        ':motivo' => $motivo,
        ':observaciones' => $observaciones,
        ':acuerdos' => $acuerdos,
        ':derivacion' => $derivacion,
        ':institucion_derivada' => ($derivacion === 'si' ? $institucion_derivada : null),
        ':usuario_modificacion' => $usuario_modificacion
    ]);
    
    if ($datos_antes) {
        $cambios = [];
        if ($datos_antes['motivo_anterior'] !== $motivo) {
            $cambios[] = "Motivo: '{$datos_antes['motivo_anterior']}' → '$motivo'";
        }
        $cambios_texto = !empty($cambios) ? implode(', ', $cambios) : 'Actualización de observaciones/acuerdos';
        
        $detalles = "Entrevista ID: $id, Alumno: {$datos_antes['alumno_nombre']} (RUN: {$datos_antes['alumno_run']}), Familiar: {$datos_antes['familiar_nombre']}, Cambios: $cambios_texto";
        $logger->data('Entrevista con apoderado actualizada', $detalles);
    }
    
    echo json_encode(['success' => true, 'msg' => 'Entrevista actualizada correctamente']);
} catch (Exception $e) {
    $logger->error('Error al actualizar entrevista con apoderado', "Usuario ID: {$_SESSION['user_id']}, Entrevista ID: $id, Error: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['success' => false, 'msg' => 'Error al actualizar: ' . $e->getMessage()]);
}
