<?php
// Защита от прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

require_once AI_CONTENT_WIZARD_PATH . 'admin/languages.php';
require_once AI_CONTENT_WIZARD_PATH . 'includes/model-helpers.php';

/**
 * Возвращает массив всех используемых (занятых) ключевых слов на сайте
 * с учётом активного SEO-плагина (Yoast, RankMath, AIOSEO).
 *
 * @return array
 */
function ai_content_wizard_get_used_keywords() {
    // Определяем, какой SEO-плагин активен
    $seo_fields = ai_content_wizard_check_seo_plugin();

    // Если у плагина нет поля для ключевых слов, выходим
    if (!isset($seo_fields['keyword'])) {
        return [];
    }

    $keyword_meta_key = $seo_fields['keyword'];

    // Получаем все опубликованные посты (можно ограничить post_type => 'post' или иными типами)
    $args = [
        'post_type'   => 'any',
        'post_status' => 'publish',
        'numberposts' => -1,
    ];
    $posts = get_posts($args);

    $used_keywords = [];
    foreach ($posts as $p) {
        $k = get_post_meta($p->ID, $keyword_meta_key, true);
        if (!empty($k)) {
            // Приводим к нижнему регистру для унификации
            $used_keywords[] = mb_strtolower(trim($k));
        }
    }

    // Удалим дубликаты
    $used_keywords = array_unique($used_keywords);

    return $used_keywords;
}


/**
 * Генерирует или получает ключевое слово для поста.
 *
 * @param string $post_topic        Тема поста.
 * @param string $category_name     Название категории.
 * @param string $selected_language Выбранный язык.
 *
 * @return string Сгенерированное или полученное ключевое слово.
 */
function ai_content_wizard_get_or_generate_keyword($post_topic, $category_name, $selected_language) {
    // Получаем текущую модель
    $text_model = ai_content_wizard_get_setting('ai_content_wizard_text_model') ?? '';
    if (!is_string($text_model)) {
        $text_model = '';
    }
    $text_model = trim($text_model);
    $is_openai_model = ai_content_wizard_is_openai_model($text_model);

    // Подключаем файлы для генерации ключевого слова (только для OpenAI)
    if ($is_openai_model) {
        require_once AI_CONTENT_WIZARD_PATH . 'includes/text-generation/seo-generation/openai/openai_generate_keyword.php';
    } else {
        error_log('No valid OpenAI model found. Check the selected text model.');
        return '';
    }

    // Определяем API-ключ для OpenAI
    if ($is_openai_model) {
        $api_key = ai_content_wizard_get_setting('ai_content_wizard_api_key') ?? '';
    } else {
        $api_key = '';
        error_log('No valid OpenAI model found. API key is empty.');
    }

    if (empty($api_key)) {
        error_log('API key is empty for the selected model.');
        return '';
    }

    // Получаем ID категории и проверяем настройки
    $category_id         = 'category-' . get_cat_ID($category_name);
    $use_global_settings = ai_content_wizard_get_category_setting($category_id, 'use_global_settings', 1);
    $format = $use_global_settings
        ? ai_content_wizard_get_setting('ai_content_wizard_format', 'post')
        : ai_content_wizard_get_category_setting($category_id, 'format', 'post');

    // Если ключевое слово уже передано в POST запросе, используем его
    if (!empty($_POST['keyword'])) {
        $posted_keyword = sanitize_text_field($_POST['keyword']);
        error_log("Keyword from POST request: '$posted_keyword'");
        return $posted_keyword;
    }

    // Получаем список уже занятых ключевых слов
    $used_keywords = ai_content_wizard_get_used_keywords(); // массив строк в нижнем регистре

    // Генерируем ключевое слово с помощью функции для OpenAI
    if ($is_openai_model && function_exists('generate_keyword_openai')) {
        $recommended_keyword = generate_keyword_openai(
            $post_topic,
            $category_name,
            $selected_language,
            $api_key,
            $text_model,
            $format,
            $used_keywords
        );
    } else {
        error_log('No valid function defined for OpenAI keyword generation.');
        $recommended_keyword = '';
    }

    // Если ключевое слово не сгенерировано, создаём его самостоятельно
    if (empty($recommended_keyword)) {
        $recommended_keyword = sanitize_text_field($post_topic) . '-' . strtolower(sanitize_text_field($category_name));
        error_log("Default keyword used: '$recommended_keyword'");
    }

    return $recommended_keyword;
}
