// The Lucia project.
// Copyright 2026-2026 DSP, inc.  All rights reserved.
// Authors:
//   imacat.yang@dsp.im (imacat), 2026/03/05

import { describe, it, expect, beforeEach } from "vitest";
import { setActivePinia, createPinia } from "pinia";
import { usePageAdminStore } from "@/stores/pageAdmin";

describe("pageAdminStore", () => {
  let store;

  beforeEach(() => {
    setActivePinia(createPinia());
    store = usePageAdminStore();
  });

  it("has correct default state", () => {
    expect(store.activePage).toBe("MAP");
    expect(store.previousPage).toBe("MAP");
    expect(store.pendingActivePage).toBe("FILES");
    expect(store.isPagePending).toBe(false);
    expect(store.shouldKeepPreviousPage).toBe(false);
    expect(store.currentMapFile).toBe("");
  });

  it("setActivePage converts page name", () => {
    store.setActivePage("CheckConformance");
    expect(store.activePage).toBe("CONFORMANCE");
  });

  it("setPreviousPage converts page name", () => {
    store.setPreviousPage("CheckPerformance");
    expect(store.previousPage).toBe("PERFORMANCE");
  });

  it("setPreviousPageUsingActivePage copies activePage to previousPage", () => {
    store.setActivePage("CONFORMANCE");
    store.setPreviousPageUsingActivePage();
    expect(store.previousPage).toBe("CONFORMANCE");
  });

  it("setIsPagePendingBoolean sets boolean", () => {
    store.setIsPagePendingBoolean(true);
    expect(store.isPagePending).toBe(true);
  });

  it("setPendingActivePage converts and sets page", () => {
    store.setPendingActivePage("CheckMap");
    expect(store.pendingActivePage).toBe("MAP");
  });

  it("setPendingActivePage maps CompareDashboard to PERFORMANCE", () => {
    store.setPendingActivePage("CompareDashboard");
    expect(store.pendingActivePage).toBe("PERFORMANCE");
  });

  it("copyPendingPageToActivePage transfers value", () => {
    store.setPendingActivePage("CheckConformance");
    store.copyPendingPageToActivePage();
    expect(store.activePage).toBe("CONFORMANCE");
  });

  it("clearPendingActivePage resets to empty", () => {
    store.setPendingActivePage("CheckMap");
    store.clearPendingActivePage();
    expect(store.pendingActivePage).toBe("");
  });

  it("keepPreviousPage restores previous page", () => {
    store.setPreviousPage("CONFORMANCE");
    store.setActivePage("PERFORMANCE");
    store.keepPreviousPage();
    expect(store.activePage).toBe("CONFORMANCE");
    expect(store.shouldKeepPreviousPage).toBe(true);
  });

  it("clearShouldKeepPreviousPageBoolean resets flag", () => {
    store.keepPreviousPage();
    store.clearShouldKeepPreviousPageBoolean();
    expect(store.shouldKeepPreviousPage).toBe(false);
  });

  it("setCurrentMapFile sets file name", () => {
    store.setCurrentMapFile("test.csv");
    expect(store.currentMapFile).toBe("test.csv");
  });

  it("setActivePageComputedByRoute extracts route name", () => {
    const routeMatched = [{ name: "CheckMap" }];
    store.setActivePageComputedByRoute(routeMatched);
    expect(store.activePageComputedByRoute).toBe("MAP");
  });

  it("setActivePageComputedByRoute handles empty array", () => {
    store.setActivePageComputedByRoute([]);
    // Should not change default value
    expect(store.activePageComputedByRoute).toBe("MAP");
  });
});
