/**
 * Appels JSON ponctuels (hors navigation Inertia) - utilisé par les
 * fonctionnalités d'assistance IA (suggestion de mots-clés, détection de
 * doublons) qui renvoient un résultat à afficher dans un dialog déjà ouvert,
 * pas une nouvelle page. Le jeton CSRF est lu depuis le cookie XSRF-TOKEN
 * que Laravel pose automatiquement (même mécanisme que l'intégration axios
 * par défaut des starter kits Laravel, ici répliqué sans dépendance axios).
 */
function xsrfToken(): string {
    const match = document.cookie.match(/(?:^|; )XSRF-TOKEN=([^;]*)/);
    return match ? decodeURIComponent(match[1]) : '';
}

export async function postJson<T>(url: string, body: unknown): Promise<T> {
    const response = await fetch(url, {
        method: 'POST',
        credentials: 'same-origin',
        headers: {
            'Content-Type': 'application/json',
            Accept: 'application/json',
            'X-Requested-With': 'XMLHttpRequest',
            'X-XSRF-TOKEN': xsrfToken(),
        },
        body: JSON.stringify(body),
    });

    if (!response.ok) {
        const message = await response.text();
        throw new Error(message || `Requête échouée (${response.status})`);
    }

    return response.json() as Promise<T>;
}

export async function postFormData<T>(url: string, body: FormData): Promise<T> {
    const response = await fetch(url, {
        method: 'POST',
        credentials: 'same-origin',
        headers: {
            Accept: 'application/json',
            'X-Requested-With': 'XMLHttpRequest',
            'X-XSRF-TOKEN': xsrfToken(),
        },
        body,
    });

    if (!response.ok) {
        const message = await response.text();
        throw new Error(message || `Requête échouée (${response.status})`);
    }

    return response.json() as Promise<T>;
}
