// src/hooks/use-mangools-sync.ts — wrapper client de `syncMangoolsAction`,
// partagé par le réservoir et la recherche (menu Sync + bouton par-ligne).
// Enfile un enrichissement Mangools puis `onQueued()` (que l'appelant câble sur
// le `refresh()` du polling → le spinner réapparaît immédiatement). Le 409
// (« déjà en cours ») est rendu en toast doux, jamais en erreur bloquante.
"use client";

import { useTransition } from "react";
import { toast } from "sonner";
import type { KeywordSelection } from "@/lib/keywords/list-query";
import { syncMangoolsAction } from "@/lib/mangools/sync-actions";

export type UseMangoolsSync = {
  /** Enrichit une sélection (`KeywordSelection`, même contrat que SE-Ranking) :
   *  ids explicites, « les N filtrés » (mode filter), ou ids vide → le serveur
   *  résout les kw sans métriques. La résolution des ids se fait CÔTÉ SERVEUR. */
  syncSelection: (selection: KeywordSelection) => void;
  /** Enrichit un seul mot-clé (bouton par-ligne). */
  syncOne: (keywordId: string) => void;
  /** True pendant l'appel serveur (désactive l'entrée de menu / le bouton). */
  syncing: boolean;
};

export function useMangoolsSync(
  siteId: string,
  opts?: { onQueued?: () => void },
): UseMangoolsSync {
  const [syncing, startSync] = useTransition();

  function run(selection: KeywordSelection) {
    startSync(async () => {
      try {
        const res = await syncMangoolsAction(siteId, selection);
        if (!res.ok) {
          if (res.error === "already_running") {
            toast.info(
              "Un enrichissement Mangools est déjà en cours pour ce site.",
            );
          } else {
            toast.info("Aucun mot-clé à enrichir via Mangools.");
          }
          return;
        }
        toast.success(
          `Enrichissement Mangools lancé — ${res.count} mot(s)-clé(s).`,
        );
        opts?.onQueued?.();
      } catch {
        toast.error("Échec du lancement de l'enrichissement Mangools.");
      }
    });
  }

  return {
    syncSelection: (selection) => run(selection),
    syncOne: (keywordId) => run({ mode: "ids", ids: [keywordId] }),
    syncing,
  };
}
