import assert from "node:assert/strict";
import test from "node:test";
import { LegacyGameCoordinator } from "../src/games/LegacyGameCoordinator.ts";
import type { ActiveGame } from "../src/games/GameRouter.ts";

type CoordinatorInternals = {
  mergePanelSettings(base: Record<string, unknown>, game: ActiveGame): Record<string, unknown>;
};

const coordinator = new LegacyGameCoordinator({} as never, () => undefined) as unknown as CoordinatorInternals;

test("les messages du panel remplacent les messages historiques du Quiz", () => {
  const merged = coordinator.mergePanelSettings(
    { messages: { launch: "Ancien lancement", answer: "Ancienne réponse", podium: "Ancien podium" } },
    {
      game_session_id: 1,
      game: "quiz",
      state: "starting",
      settings: {
        message_launch: "Mon Quiz par {username}",
        message_answer: "Réponse : {answer}",
        message_podium: "",
      }
    }
  );
  assert.deepEqual(merged.messages, {
    launch: "Mon Quiz par {username}",
    answer: "Réponse : {answer}",
    podium: ""
  });
});

test("les clés spécifiques des quatre jeux sont correctement traduites", () => {
  const cases: Array<[ActiveGame["game"], string, string]> = [
    ["quiz", "message_answer", "answer"],
    ["motus", "message_multi_found", "multiFound"],
    ["whoami", "message_round_transition", "roundTransition"],
    ["petitbac", "message_no_answers", "noAnswers"]
  ];
  for (const [game, source, target] of cases) {
    const merged = coordinator.mergePanelSettings(
      { messages: { [target]: "Avant" } },
      { game_session_id: 1, game, state: "starting", settings: { [source]: "Après" } }
    );
    assert.equal((merged.messages as Record<string, string>)[target], "Après");
  }
});
