import assert from "node:assert/strict";
import test from "node:test";
import { renderToStaticMarkup } from "react-dom/server";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { PathnameContext } from "next/dist/shared/lib/hooks-client-context.shared-runtime";
import { AppLanguageProvider } from "@/components/providers/app-language-provider";
import { EvaluationSummaryCards } from "@/features/admin/evaluation-form/components/evaluation-summary-cards";
import { IssueMatrixTranslationProvider } from "./issue-matrix-translation-provider";

test("imported Admin evaluation UI reads each Issue Matrix route's dictionary", () => {
  const client = new QueryClient({
    defaultOptions: { queries: { retry: false } },
  });
  const summary = {
    totalSubmissions: 1,
    pendingReview: 1,
    reviewed: 0,
    completed: 0,
  };
  try {
    for (const owner of ["ministry", "pswg", "cdc", "cefp", "cdcgpsf"])
      for (const lang of ["en", "kh"])
        client.setQueryData(["translations", owner, "issue_matrix", lang], {
          "evaluation.total_submissions": owner + " submissions",
        });
    for (const owner of ["ministry", "pswg", "cdc", "cefp", "cdcgpsf"]) {
      const html = renderToStaticMarkup(
        <QueryClientProvider client={client}>
          <PathnameContext.Provider
            value={`/${owner === "cdcgpsf" ? "cdc-gpsf" : owner}/issue-matrix/evaluation-forms`}
          >
            <AppLanguageProvider>
              <IssueMatrixTranslationProvider>
                <EvaluationSummaryCards summary={summary} />
              </IssueMatrixTranslationProvider>
            </AppLanguageProvider>
          </PathnameContext.Provider>
        </QueryClientProvider>,
      );
      assert.ok(html.includes(owner + " submissions"));
    }
    // The original Admin page remains usable without the module provider.
    const admin = renderToStaticMarkup(
      <AppLanguageProvider>
        <EvaluationSummaryCards summary={summary} />
      </AppLanguageProvider>,
    );
    assert.ok(!admin.includes("ministry submissions"));
  } finally {
    client.clear();
  }
});
