import { useMutation } from '@tanstack/react-query';
import type { AssistantAsk } from '@siop/shared';
import { api } from './client';

/** Hook R6.5 — l'assistant passe par l'API NestJS (le service IA n'est
 *  jamais appelé depuis l'app, ADR-004 §4). Le 503 est un état ATTENDU du
 *  contrat (service éteint ou pas encore déployé) — même message que le web. */

async function unwrap<T>(res: { data?: T; error?: unknown; response: Response }): Promise<T> {
  if (res.response.status === 503) {
    throw new Error('Assistant indisponible pour le moment — réessayez dans un instant.');
  }
  if (res.error || res.data === undefined) {
    const message =
      (res.error as { message?: string } | undefined)?.message ??
      `Le serveur a répondu ${res.response.status}`;
    throw new Error(Array.isArray(message) ? message.join(' — ') : message);
  }
  return res.data;
}

export function useAskAssistant() {
  return useMutation({
    mutationFn: async (body: AssistantAsk) => unwrap(await api.POST('/assistant/ask', { body })),
  });
}
