import { describe, expect, it } from "vitest";
import {
  DEFAULT_KALEIDOSCOPE_HREF,
  kaleidoscopeHrefFromPublicPath,
  publicPathFromLocationPathname,
  resolveCurriculumHeroBackHref,
  resolveCurriculumHeroBackNav,
} from "./curriculumHeroBackNav";

describe("curriculumHeroBackNav", () => {
  it("derives kaleidoscope href from a curriculum public path", () => {
    expect(kaleidoscopeHrefFromPublicPath("/grade/kg/curriculum")).toBe("/grade/kg");
    expect(kaleidoscopeHrefFromPublicPath("/grade/g3/curriculum")).toBe("/grade/g3");
    expect(kaleidoscopeHrefFromPublicPath("/other")).toBe(DEFAULT_KALEIDOSCOPE_HREF);
  });

  it("strips admin and preview prefixes from the browser pathname", () => {
    expect(publicPathFromLocationPathname("/secure-access/dashboard/pages/1/edit")).toBe(
      "/dashboard/pages/1/edit"
    );
    expect(publicPathFromLocationPathname("/preview/grade/kg/curriculum")).toBe(
      "/grade/kg/curriculum"
    );
  });

  it("ignores Spark Dashboard hrefs and derives kaleidoscope from the current path", () => {
    expect(resolveCurriculumHeroBackHref("/", "/grade/kg/curriculum")).toBe("/grade/kg");
    expect(resolveCurriculumHeroBackHref("", "/preview/grade/g2/curriculum")).toBe("/grade/g2");
    expect(resolveCurriculumHeroBackHref("/home", "/grade/kg/curriculum")).toBe("/grade/kg");
  });

  it("honors an explicit non-Spark backHref", () => {
    expect(resolveCurriculumHeroBackHref("/grade/kg", "/grade/g5/curriculum")).toBe("/grade/kg");
    expect(resolveCurriculumHeroBackHref("/custom/kaleidoscope", "/")).toBe("/custom/kaleidoscope");
  });

  it("uses a plain anchor in the admin shell so the catch-all cannot send users to Spark/admin home", () => {
    const nav = resolveCurriculumHeroBackNav("/grade/kg", "/secure-access/dashboard/pages/9/edit");
    expect(nav).toEqual({ href: "/grade/kg", useRouterLink: false });
  });

  it("keeps preview mode under /preview", () => {
    const nav = resolveCurriculumHeroBackNav("/grade/kg", "/preview/grade/kg/curriculum");
    expect(nav).toEqual({ href: "/preview/grade/kg", useRouterLink: true });
  });

  it("uses a normal router link on published pages", () => {
    const nav = resolveCurriculumHeroBackNav("/grade/kg", "/grade/kg/curriculum");
    expect(nav).toEqual({ href: "/grade/kg", useRouterLink: true });
  });
});
