<?php
// admin/sync_languages.php

require_once __DIR__ . '/../includes/session_check.php';
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/logger.php';
require_once __DIR__ . '/../src/Translate.php';

header('Content-Type: application/json');

// Envolver todo en un manejador de errores para capturar hasta los errores fatales
register_shutdown_function(function () {
    $error = error_get_last();
    if ($error !== null && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
        // Limpiar cualquier salida anterior
        if (ob_get_length()) {
            ob_end_clean();
        }
        echo json_encode(['success' => false, 'error' => 'Error fatal en el servidor: ' . $error['message'] . ' en ' . $error['file'] . ' línea ' . $error['line']]);
    }
});

// Solo para administradores
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
    echo json_encode(['success' => false, 'error' => 'Acceso denegado.']);
    exit;
}

try {
    // 1. Verificar que la URL de LibreTranslate esté configurada
    if (empty($_ENV['LIBRETRANSLATE_URL'])) {
        throw new Exception("La variable de entorno LIBRETRANSLATE_URL no está configurada en tu archivo .env");
    }

    $translator = new Translate();
    $libreLanguages = $translator->getSupportedLanguages();

    if ($libreLanguages === null) {
        throw new Exception("No se pudo obtener la lista de idiomas de LibreTranslate. Revisa que la URL ('" . htmlspecialchars($_ENV['LIBRETRANSLATE_URL']) . "') sea correcta y que el servicio esté funcionando.");
    }

    if (empty($libreLanguages)) {
        throw new Exception("LibreTranslate devolvió una lista de idiomas vacía.");
    }

    $newLanguagesCount = 0;
    $sql = "INSERT IGNORE INTO supported_languages (language_code, language_name, is_active) VALUES (?, ?, 0)";
    $stmt = $pdo->prepare($sql);

    foreach ($libreLanguages as $lang) {
        if (isset($lang['code']) && isset($lang['name'])) {
            $stmt->execute([$lang['code'], $lang['name']]);
            if ($stmt->rowCount() > 0) {
                $newLanguagesCount++;
            }
        }
    }

    echo json_encode(['success' => true, 'new_languages' => $newLanguagesCount]);

} catch (Throwable $e) { // Captura Throwable para errores y excepciones
    error_log("Error en sync_languages.php: " . $e->getMessage());
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
?>