"use client";

import { useRouter } from "next/navigation";
import { JobCounters, pickCounters } from "@/components/jobs/job-counters";
import { JobWatcher } from "@/components/jobs/job-watcher";
import { ImportReportView, REPORT_FIELDS } from "@/components/keywords/import-report";
import { toImportReport } from "@/lib/imports";

// Habillage « imports » du suivi de job générique : le composant partagé ne connaît pas les
// compteurs du pipeline CSV, c'est ici qu'on les nomme. Les fonctions de rendu ne traversent
// jamais la frontière serveur → client : cette enveloppe cliente existe pour ça.

/**
 * Progression du job `import_csv` : `rows_read` est au premier niveau du `progress`, ce que
 * les écritures ont changé vit sous `counters` (`api/app/keywords/pipeline.py`).
 */
const PROGRESS_FIELDS = [{ key: "rows_read", label: "Lignes lues" }];

export function ImportJobStatus({
  jobId,
  importId,
  listId,
  siteId,
  targetId,
}: {
  jobId: string;
  importId: string;
  listId?: string | null;
  siteId?: string | null;
  targetId?: string | null;
}) {
  const router = useRouter();
  return (
    <JobWatcher
      jobId={jobId}
      // Le job terminé change la ligne `imports` : la page serveur doit se relire pour
      // afficher le statut et le rapport définitifs.
      onFinished={() => router.refresh()}
      renderProgress={(job) => (
        <div className="space-y-2">
          <JobCounters counters={pickCounters(job.progress, PROGRESS_FIELDS)} />
          <JobCounters
            counters={pickCounters(
              (job.progress?.counters as Record<string, unknown> | undefined) ?? null,
              REPORT_FIELDS,
            )}
          />
        </div>
      )}
      renderReport={(job) => (
        <ImportReportView
          report={toImportReport(job.report)}
          //  Le motif d'échec est déjà rendu par `JobWatcher`, juste en dessous : il n'est
          //  passé ici que pour taire le « Aucun rapport pour l'instant. », qui laissait
          //  croire à un import encore en cours là où il avait échoué.
          error={job.error}
          importId={importId}
          listId={listId}
          siteId={siteId}
          targetId={targetId}
        />
      )}
    />
  );
}
