<?php
/**
 * Plugin Name: QFOXAI Chat Starter
 * Description: Minimal server-side QFOXAI chat shortcode starter. Add [qfoxai_chat] to a page.
 * Version: 1.0.0
 * Author: QFOXAI
 */

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

add_action('admin_menu', function () {
    add_options_page('QFOXAI Chat', 'QFOXAI Chat', 'manage_options', 'qfoxai-chat', 'qfoxai_chat_settings_page');
});

add_action('admin_init', function () {
    register_setting('qfoxai_chat', 'qfoxai_api_key', ['sanitize_callback' => 'sanitize_text_field']);
    register_setting('qfoxai_chat', 'qfoxai_model', ['sanitize_callback' => 'sanitize_text_field']);
});

function qfoxai_chat_settings_page(): void
{
    ?>
    <div class="wrap">
        <h1>QFOXAI Chat</h1>
        <form method="post" action="options.php">
            <?php settings_fields('qfoxai_chat'); ?>
            <table class="form-table" role="presentation">
                <tr>
                    <th scope="row"><label for="qfoxai_api_key">API Key</label></th>
                    <td><input name="qfoxai_api_key" id="qfoxai_api_key" type="password" value="<?php echo esc_attr(get_option('qfoxai_api_key', '')); ?>" class="regular-text" autocomplete="off"></td>
                </tr>
                <tr>
                    <th scope="row"><label for="qfoxai_model">Model</label></th>
                    <td><input name="qfoxai_model" id="qfoxai_model" type="text" value="<?php echo esc_attr(get_option('qfoxai_model', 'QFOXAI')); ?>" class="regular-text"></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
        <p>Add <code>[qfoxai_chat]</code> to any page.</p>
    </div>
    <?php
}

add_shortcode('qfoxai_chat', function () {
    $nonce = wp_create_nonce('qfoxai_chat');
    ob_start();
    ?>
    <div class="qfoxai-chat-box" data-nonce="<?php echo esc_attr($nonce); ?>">
        <div class="qfoxai-chat-log" aria-live="polite"></div>
        <form class="qfoxai-chat-form">
            <textarea name="message" rows="3" placeholder="Ask QFOXAI..." required></textarea>
            <button type="submit">Send</button>
        </form>
    </div>
    <style>
        .qfoxai-chat-box{border:1px solid #dbe3ef;border-radius:12px;padding:14px;max-width:760px;background:#fff}
        .qfoxai-chat-log{min-height:120px;margin-bottom:12px;display:grid;gap:10px}
        .qfoxai-chat-log div{padding:10px;border-radius:10px;background:#f8fafc}
        .qfoxai-chat-form{display:grid;gap:8px}.qfoxai-chat-form textarea{width:100%;box-sizing:border-box}.qfoxai-chat-form button{justify-self:start}
    </style>
    <script>
    (function(){
        const box = document.currentScript.previousElementSibling.previousElementSibling;
        const form = box.querySelector('.qfoxai-chat-form');
        const log = box.querySelector('.qfoxai-chat-log');
        form.addEventListener('submit', async function(event){
            event.preventDefault();
            const message = form.message.value.trim();
            if (!message) return;
            log.insertAdjacentHTML('beforeend', '<div><strong>You:</strong> ' + message.replace(/[&<>]/g, s => ({'&':'&amp;','<':'&lt;','>':'&gt;'}[s])) + '</div>');
            form.message.value = '';
            const body = new FormData();
            body.append('action', 'qfoxai_chat');
            body.append('nonce', box.dataset.nonce);
            body.append('message', message);
            const res = await fetch('<?php echo esc_url(admin_url('admin-ajax.php')); ?>', { method: 'POST', body });
            const data = await res.json();
            const answer = data.success ? data.data.answer : (data.data && data.data.message ? data.data.message : 'QFOXAI could not answer right now.');
            log.insertAdjacentHTML('beforeend', '<div><strong>QFOXAI:</strong> ' + answer.replace(/[&<>]/g, s => ({'&':'&amp;','<':'&lt;','>':'&gt;'}[s])) + '</div>');
        });
    })();
    </script>
    <?php
    return ob_get_clean();
});

add_action('wp_ajax_qfoxai_chat', 'qfoxai_chat_handle');
add_action('wp_ajax_nopriv_qfoxai_chat', 'qfoxai_chat_handle');

function qfoxai_chat_handle(): void
{
    check_ajax_referer('qfoxai_chat', 'nonce');

    $apiKey = (string) get_option('qfoxai_api_key', '');
    if ($apiKey === '') {
        wp_send_json_error(['message' => 'QFOXAI API key is not configured.'], 400);
    }

    $message = sanitize_textarea_field(wp_unslash($_POST['message'] ?? ''));
    if ($message === '') {
        wp_send_json_error(['message' => 'Message is required.'], 422);
    }

    $response = wp_remote_post('https://qfoxai.com/v1/chat/completions', [
        'timeout' => 60,
        'headers' => [
            'Authorization' => 'Bearer ' . $apiKey,
            'Content-Type' => 'application/json',
        ],
        'body' => wp_json_encode([
            'model' => (string) get_option('qfoxai_model', 'QFOXAI'),
            'messages' => [['role' => 'user', 'content' => $message]],
            'max_tokens' => 400,
        ]),
    ]);

    if (is_wp_error($response)) {
        wp_send_json_error(['message' => $response->get_error_message()], 502);
    }

    $payload = json_decode((string) wp_remote_retrieve_body($response), true);
    $answer = $payload['choices'][0]['message']['content'] ?? null;

    if (! $answer) {
        wp_send_json_error(['message' => $payload['error']['message'] ?? 'QFOXAI returned an empty response.'], 502);
    }

    wp_send_json_success(['answer' => $answer]);
}