<?php
/**
 * change_language.php
 * 
 * Este script maneja el cambio de idioma en la aplicación.
 * Actualiza la sesión del usuario con el idioma seleccionado.
 */

// Iniciar la sesión si no está iniciada
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Incluir configuración y base de datos
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/translation_helper.php';

// Configurar cabeceras para respuesta JSON
header('Content-Type: application/json');

// Verificar que la solicitud sea POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405); // Método no permitido
    echo json_encode(['success' => false, 'message' => 'Método no permitido']);
    exit;
}

// Obtener el idioma de la solicitud
$language = $_POST['language'] ?? null;

// Validar que se proporcionó un idioma
if (empty($language)) {
    http_response_code(400); // Solicitud incorrecta
    echo json_encode(['success' => false, 'message' => 'No se proporcionó un idioma']);
    exit;
}

// Verificar que el idioma esté disponible
$availableLanguages = get_available_languages();
$validLanguage = false;

foreach ($availableLanguages as $lang) {
    if ($lang['code'] === $language) {
        $validLanguage = true;
        break;
    }
}

if (!$validLanguage) {
    http_response_code(400); // Solicitud incorrecta
    echo json_encode(['success' => false, 'message' => 'Idioma no válido']);
    exit;
}

// Actualizar el idioma en la sesión
$_SESSION['language'] = $language;

// Si el usuario está autenticado, actualizar su preferencia de idioma en la base de datos
if (isset($_SESSION['user_id'])) {
    try {
        $stmt = $pdo->prepare("UPDATE users SET language = ? WHERE id = ?");
        $stmt->execute([$language, $_SESSION['user_id']]);
    } catch (PDOException $e) {
        // Registrar el error pero no fallar la operación
        error_log("Error al actualizar el idioma del usuario: " . $e->getMessage());
    }
}

// Limpiar la caché de traducciones si existe
if (isset($GLOBALS['_translations_cache'])) {
    $GLOBALS['_translations_cache'] = [];
}

// Devolver respuesta exitosa
echo json_encode([
    'success' => true,
    'message' => 'Idioma actualizado correctamente',
    'language' => $language
]);

// Registrar el cambio de idioma
custom_log("Idioma cambiado a: " . $language, 'language');

// Finalizar el script
exit;
