/**
 * Tests for HistoricSessionBanner — render with sessionName/null + backToLive callback
 */
import { describe, it } from "node:test";
import assert from "node:assert/strict";

// Pure logic tests — no DOM needed (no next-intl in node:test runner)

describe("HistoricSessionBanner logic", () => {
  it("resolves session display name when provided", () => {
    const sessionName = "My Test Session";
    const display = sessionName ?? "Untitled session";
    assert.equal(display, "My Test Session");
  });

  it("falls back to untitledSession when sessionName is null", () => {
    const sessionName: string | null = null;
    const fallback = "Untitled session";
    const display = sessionName ?? fallback;
    assert.equal(display, "Untitled session");
  });

  it("falls back to untitledSession when sessionName is empty string", () => {
    const sessionName: string | null = "";
    // empty string is falsy — banner should show fallback
    const fallback = "Untitled session";
    const display = sessionName || fallback;
    assert.equal(display, "Untitled session");
  });

  it("onBackToLive callback is invoked on click", () => {
    let called = false;
    const onBackToLive = () => { called = true; };
    // Simulate button click
    onBackToLive();
    assert.equal(called, true);
  });

  it("banner renders when selectedSessionId is defined (gate logic)", () => {
    const selectedSessionId: string | undefined = "session-abc";
    // In TrafficInspectorPageClient the banner renders when this is not undefined
    const shouldRender = selectedSessionId !== undefined;
    assert.equal(shouldRender, true);
  });

  it("banner does not render when selectedSessionId is undefined (gate logic)", () => {
    const selectedSessionId: string | undefined = undefined;
    const shouldRender = selectedSessionId !== undefined;
    assert.equal(shouldRender, false);
  });

  it("backToLive sets sessionId to undefined", () => {
    let sessionId: string | undefined = "session-abc";
    const backToLive = () => { sessionId = undefined; };
    backToLive();
    assert.equal(sessionId, undefined);
  });

  it("session name is looked up from sessions array", () => {
    const sessions = [
      { id: "s1", name: "Session Alpha", startedAt: "2024-01-01", requestCount: 5 },
      { id: "s2", name: undefined, startedAt: "2024-01-02", requestCount: 3 },
    ];
    const selectedId = "s1";
    const name = sessions.find((s) => s.id === selectedId)?.name ?? null;
    assert.equal(name, "Session Alpha");
  });

  it("session name is null when session not found in array", () => {
    const sessions = [
      { id: "s1", name: "Session Alpha", startedAt: "2024-01-01", requestCount: 5 },
    ];
    const selectedId = "not-exist";
    const name = sessions.find((s) => s.id === selectedId)?.name ?? null;
    assert.equal(name, null);
  });
});
