<?php
/**
 * EONSR AEO Agent - Polylang Integration Helpers
 *
 * Provides utility functions to handle content localization and link adjustments
 * specifically for Polylang integration.
 *
 * @package EONSR_AEO_Agent
 */

if (!defined('ABSPATH')) {
    exit;
}

/**
 * Dịch các URL liên kết nội bộ (Internal Links) bên trong nội dung HTML.
 *
 * Hàm này quét toàn bộ thẻ <a>, xác định xem đó có phải link nội bộ không,
 * sau đó tìm bản dịch tương ứng của bài viết đó (nếu có) trong Polylang
 * và thay thế URL gốc bằng URL của bản dịch.
 *
 * @param string $html_content      Nội dung HTML cần xử lý.
 * @param string $target_lang_slug  Mã ngôn ngữ đích (VD: 'en', 'vi').
 * @return string Nội dung HTML đã được cập nhật link.
 */
function eonsr_aeo_agent_translate_internal_links($html_content, $target_lang_slug)
{
    // 1. Validate Input
    if (empty($html_content) || empty($target_lang_slug)) {
        return $html_content;
    }

    // 2. Process Anchor Tags
    return preg_replace_callback(
        '/<a\s[^>]*href=["\'](.*?)["\'][^>]*>/i',
        function ($matches) use ($target_lang_slug) {
            $original_tag = $matches[0];
            $original_url = $matches[1];

            // A. Check Internal Link: Only process links belonging to this site
            if (strpos($original_url, home_url()) === false) {
                return $original_tag;
            }

            // B. Resolve Post ID from URL
            $source_post_id = url_to_postid($original_url);
            if (!$source_post_id) {
                return $original_tag;
            }

            // C. Get Translation via Polylang
            // Check if a translated version exists for the target language
            // Note: pll_get_post is a 3rd party function, do not prefix.
            $translated_post_id = pll_get_post($source_post_id, $target_lang_slug);

            if ($translated_post_id && $translated_post_id !== $source_post_id) {
                $translated_url = get_permalink($translated_post_id);
                
                if ($translated_url) {
                    // Replace the URL inside the original <a> tag
                    return str_replace($original_url, $translated_url, $original_tag);
                }
            }

            return $original_tag;
        },
        $html_content
    );
}

/**
 * Lấy tên hiển thị đầy đủ của ngôn ngữ từ Slug (VD: 'en' -> 'English').
 *
 * Sử dụng hàm nội bộ của Polylang để tra cứu.
 *
 * @param string $slug Mã ngôn ngữ (VD: 'vi', 'en').
 * @return string Tên ngôn ngữ hoặc chính slug nếu không tìm thấy.
 */
function eonsr_aeo_agent_get_polylang_lang_name($slug)
{
    // Ensure Polylang function is available
    if (!function_exists('pll_languages_list')) {
        return $slug;
    }

    $languages = pll_languages_list(['fields' => '']);

    foreach ($languages as $lang) {
        if ($lang->slug === $slug) {
            return $lang->name;
        }
    }

    return $slug;
}