import { describe, it, expect, beforeEach, vi } from "vitest";
import { readViewMode } from "./ViewModeToggle";

describe("readViewMode", () => {
  const store = new Map<string, string>();
  const mockLocalStorage = {
    getItem: vi.fn((key: string) => store.get(key) ?? null),
    setItem: vi.fn((key: string, value: string) => {
      store.set(key, value);
    }),
    removeItem: vi.fn((key: string) => {
      store.delete(key);
    }),
    clear: vi.fn(() => store.clear()),
    key: vi.fn(),
    length: 0,
  };

  beforeEach(() => {
    store.clear();
    vi.stubGlobal("localStorage", mockLocalStorage);
  });

  it("returns fallback when key is missing", () => {
    expect(readViewMode("reports-viewmode-highlights")).toBe("chart");
  });

  it("returns 'chart' when stored value is 'chart'", () => {
    store.set("reports-viewmode-highlights", "chart");
    expect(readViewMode("reports-viewmode-highlights")).toBe("chart");
  });

  it("returns 'table' when stored value is 'table'", () => {
    store.set("reports-viewmode-highlights", "table");
    expect(readViewMode("reports-viewmode-highlights")).toBe("table");
  });

  it("ignores invalid stored values and returns fallback", () => {
    store.set("reports-viewmode-highlights", "bogus");
    expect(readViewMode("reports-viewmode-highlights", "table")).toBe("table");
  });

  it("respects custom fallback when provided", () => {
    expect(readViewMode("reports-viewmode-compare", "table")).toBe("table");
  });
});
