<?php
require 'vendor/autoload.php';
use Stichoza\GoogleTranslate\GoogleTranslate;

// Configuración de Google Translate
$tr = new GoogleTranslate('es'); // Traducir al español

// Función para traducir texto manejando errores
function safeTranslate($tr, $text) {
    try {
        return $tr->translate($text);
    } catch (Exception $e) {
        // Manejar el error y devolver el texto original si la traducción falla
        return $text;
    }
}

// Función para extraer el contenido del artículo desde la URL
function getArticleContent($url) {
    $html = file_get_contents($url);
    preg_match('/<article.*?>(.*?)<\/article>/s', $html, $matches);
    $content = $matches[1] ?? '';

    // Eliminar partes no deseadas del contenido
    $content = preg_replace('/<div class="sharedaddy.*?<\/div>/s', '', $content);
    $content = preg_replace('/<footer class="entry-footer.*?<\/footer>/s', '', $content);
    $content = preg_replace('/<div class="jp-relatedposts.*?<\/div>/s', '', $content);
    $content = preg_replace('/<p>Some retail links will provide ORD with an affiliate.*?<\/p>/s', '', $content);
    $content = preg_replace('/<p>Share this:.*?<\/p>/s', '', $content);
    $content = preg_replace('/<p class="entry-meta">.*?<\/p>/s', '', $content);
    $content = preg_replace('/<span class="entry-author">.*?<\/span>/s', '', $content);

    return $content;
}

// Función para extraer la imagen principal del artículo desde la URL
function getArticleImage($url) {
    $html = file_get_contents($url);
    preg_match('/<meta property="og:image" content="(.*?)"/', $html, $matches);
    return $matches[1] ?? '';
}

// Función para limpiar y codificar contenido HTML
function cleanContent($content) {
    return htmlspecialchars($content, ENT_XML1 | ENT_QUOTES, 'UTF-8');
}

// Función para traducir el contenido del artículo manteniendo los tags HTML
function translateContent($tr, $content) {
    $dom = new DOMDocument();
    @$dom->loadHTML('<?xml encoding="utf-8" ?>' . $content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $xpath = new DOMXPath($dom);
    
    foreach ($xpath->query('//*[not(self::script or self::style)]/text()') as $textNode) {
        $translatedText = safeTranslate($tr, $textNode->nodeValue);
        $textNode->nodeValue = $translatedText;
    }
    
    return $dom->saveHTML();
}

// Cargar el feed RSS original
$feedUrl = 'https://www.onlineracedriver.com/feed/';
$rss = simplexml_load_file($feedUrl);

// Crear un nuevo documento XML para el feed RSS traducido
$newRss = new SimpleXMLElement('<rss version="2.0"></rss>');
$channel = $newRss->addChild('channel');
$channel->addChild('title', 'OnlineRaceDriver (Translated to Spanish)');
$channel->addChild('link', 'https://www.onlineracedriver.com/');
$channel->addChild('description', 'Sim Racing News, Tips and Guides (Translated to Spanish)');
$channel->addChild('language', 'es-ES');

// Procesar cada artículo del feed original
foreach ($rss->channel->item as $item) {
    $title = (string) $item->title;
    $link = (string) $item->link;
    $description = (string) $item->description;
    $pubDate = (string) $item->pubDate;
    $content = getArticleContent($link);
    $image = getArticleImage($link);

    // Traducir el contenido del artículo manteniendo los tags HTML
    $translatedContent = translateContent($tr, $content);

    // Incluir la imagen en el contenido traducido, y agregar la nota de traducción
    $translatedContent .= '<p>Esto ha sido traducido con Google Translate.</p>';

    // Crear un nuevo elemento <item> en el feed RSS traducido
    $newItem = $channel->addChild('item');
    $newItem->addChild('title', cleanContent(safeTranslate($tr, $title)));
    $newItem->addChild('link', $link);
    $newItem->addChild('description', cleanContent(safeTranslate($tr, $description)));
    $newItem->addChild('pubDate', $pubDate);
    $newItem->addChild('content:encoded', '<![CDATA[' . $translatedContent . '<p>Fuente: <a href="' . $link . '">' . $link . '</a></p>]]>', 'http://purl.org/rss/1.0/modules/content/');

    if ($image) {
        // Añadir la imagen principal al feed
        $media = $newItem->addChild('media:content', '', 'http://search.yahoo.com/mrss/');
        $media->addAttribute('url', $image);
        $media->addAttribute('medium', 'image');
    }

    // Agregar categorías sin traducir
    foreach ($item->category as $category) {
        $newItem->addChild('category', cleanContent((string)$category));
    }
}

// Mostrar el nuevo feed RSS
header('Content-Type: application/rss+xml');
echo $newRss->asXML();
