<?php
if (!defined('ABSPATH')) {
    exit;
}

/**
 * Генерирует ключевое слово через OpenAI с учётом списка "запрещённых" (уже занятых).
 *
 * @param string $post_topic
 * @param string $category_name
 * @param string $selected_language
 * @param string $api_key
 * @param string $text_model
 * @param string $format
 * @param array  $used_keywords   Список занятых ключевых слов (приведены к нижнему регистру)
 * @return string
 */
function generate_keyword_openai(
    $post_topic,
    $category_name,
    $selected_language,
    $api_key,
    $text_model,
    $format,
    $used_keywords = []
) {
    $language_full_name = get_full_language_name($selected_language);

    // Собираем строку "запрещённых" ключевых слов.
    // Можно ограничить их количество, чтобы не перегружать prompt.
    $excluded_str = '';
    if (!empty($used_keywords)) {
        // Допустим, возьмём не более 30, чтобы не выходить за лимиты prompt
        $limited        = array_slice($used_keywords, 0, 30);
        $excluded_str   = implode(', ', $limited);
    }

    // Формируем prompt:
    // Указываем, что нельзя использовать уже занятые ключи.
    $keyword_prompt = "Generate a concise, unique, medium-frequency SEO keyword or phrase, not more than 2-3 words, "
        . "for a {$format} about '{$post_topic}' in the category '{$category_name}' and in the language '{$language_full_name}'. "
        . "The keyword should be straightforward and relevant. "
        . "Exclude (do not return) any keyword that appears in this list of already used keywords: [{$excluded_str}].";

    // Попробуем несколько попыток (например, 3)
    $attempts       = 0;
    $max_attempts   = 3;
    $recommended_keyword = '';

    while ($attempts < $max_attempts) {
        $attempts++;
        $response = request_openai_keyword_generation($api_key, $text_model, $keyword_prompt);

        if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
            error_log('Error making OpenAI request: ' . wp_remote_retrieve_response_message($response));
            continue; // переходим к следующей попытке
        }

        $body = json_decode(wp_remote_retrieve_body($response), true);

        if (
            isset($body['choices'][0]['message']['content']) &&
            !empty($body['choices'][0]['message']['content'])
        ) {
            $recommended_keyword = trim($body['choices'][0]['message']['content']);

            // Удалим спецсимволы и прочее
            $recommended_keyword = preg_replace('/[^\w\s-]/u', '', $recommended_keyword);
            $recommended_keyword = preg_replace('/\s+/', ' ', $recommended_keyword);
            $recommended_keyword = mb_strtolower($recommended_keyword);

            // Проверяем, не занята ли уже эта фраза (вдруг API всё же вернул дубликат)
            if (in_array($recommended_keyword, $used_keywords, true)) {
                // Сбрасываем, чтобы попытаться ещё раз
                $recommended_keyword = '';
                continue;
            }

            // Если дошли сюда — ключ не в списке занятых
            break;
        }
    }

    return $recommended_keyword;
}


/**
 * Вспомогательная функция отправки запроса к OpenAI на генерацию ключевых слов.
 */
if (!function_exists('request_openai_keyword_generation')) {
    function request_openai_keyword_generation($api_key, $text_model, $keyword_prompt) {
        return wp_remote_post('https://api.openai.com/v1/chat/completions', [
            'headers' => [
                'Authorization' => 'Bearer ' . $api_key,
                'Content-Type'  => 'application/json',
            ],
            'body'    => json_encode([
                'model'    => $text_model,
                'messages' => [
                    [
                        'role'    => 'user',
                        'content' => $keyword_prompt
                    ]
                ],
            ]),
            'timeout' => 1000,
        ]);
    }
}
