<?php
/**
 * Helpers de configuration locale et client HTTP vers le service chatbot.
 */

defined('ABSPATH') || exit;

function cvb_chatbot_default_settings(): array {
    return [
        'enabled' => false,
        'app_url' => defined('COVALBA_CHATBOT_APP_URL') ? (string) COVALBA_CHATBOT_APP_URL : '',
    ];
}

function cvb_chatbot_get_settings(): array {
    $stored = get_option(COVALBA_CHATBOT_OPTION, []);
    if (!is_array($stored)) {
        $stored = [];
    }

    $settings = array_merge(cvb_chatbot_default_settings(), $stored);
    $settings['enabled'] = (bool) ($settings['enabled'] ?? false);
    $settings['app_url'] = rtrim((string) ($settings['app_url'] ?? ''), '/');

    return $settings;
}

function cvb_chatbot_update_settings(bool $enabled, string $app_url): void {
    update_option(COVALBA_CHATBOT_OPTION, [
        'enabled' => $enabled,
        'app_url' => rtrim(esc_url_raw($app_url), '/'),
    ], false);
}

function cvb_chatbot_app_url(): string {
    $settings = cvb_chatbot_get_settings();
    return $settings['app_url'];
}

function cvb_chatbot_admin_token(): string {
    return defined('COVALBA_CHATBOT_ADMIN_TOKEN') ? (string) COVALBA_CHATBOT_ADMIN_TOKEN : '';
}

function cvb_chatbot_public_settings(): array {
    $settings = cvb_chatbot_get_settings();
    $url = $settings['app_url'];

    return [
        'enabled' => (bool) $settings['enabled'] && $url !== '',
        'widgetUrl' => $url,
    ];
}

function cvb_chatbot_revalidate_front(): void {
    if (function_exists('cvb_send_revalidate')) {
        cvb_send_revalidate(['chatbot-settings']);
    }
}

/**
 * @return array|WP_Error
 */
function cvb_chatbot_request(string $method, string $path, ?array $body = null, int $timeout = 15) {
    $base = cvb_chatbot_app_url();
    if ($base === '') {
        return new WP_Error('cvb_chatbot_missing_url', "L'URL du service chatbot n'est pas configurée.");
    }

    $token = cvb_chatbot_admin_token();
    if ($token === '') {
        return new WP_Error('cvb_chatbot_missing_token', 'COVALBA_CHATBOT_ADMIN_TOKEN est manquant côté WordPress.');
    }

    $args = [
        'method'  => strtoupper($method),
        'timeout' => $timeout,
        'headers' => [
            'Accept'        => 'application/json',
            'Authorization' => 'Bearer ' . $token,
        ],
    ];

    if ($body !== null) {
        $args['headers']['Content-Type'] = 'application/json';
        $args['body'] = wp_json_encode($body);
    }

    $response = wp_remote_request($base . $path, $args);
    if (is_wp_error($response)) {
        return $response;
    }

    $status = (int) wp_remote_retrieve_response_code($response);
    $raw = (string) wp_remote_retrieve_body($response);
    $json = $raw !== '' ? json_decode($raw, true) : [];

    if ($status < 200 || $status >= 300) {
        $message = is_array($json) && isset($json['error'])
            ? (string) $json['error']
            : sprintf('Erreur HTTP %d du service chatbot.', $status);

        return new WP_Error('cvb_chatbot_http_error', $message, [
            'status' => $status,
            'body'   => $raw,
        ]);
    }

    return is_array($json) ? $json : [];
}
