import { describe, expect, it, mock } from "bun:test";

mock.module("server-only", () => ({}));
mock.module("next/headers", () => ({
  cookies: async () => ({ get: () => undefined }),
}));

const { pickActiveSiteId, pickActiveLanguage, DEFAULT_LANGUAGE } = await import(
  "./active-site"
);

describe("pickActiveSiteId", () => {
  it("keeps a valid cookie value", () => {
    expect(pickActiveSiteId(["a", "b"], "b")).toBe("b");
  });
  it("falls back to the first site when the cookie is missing or stale", () => {
    expect(pickActiveSiteId(["a", "b"], undefined)).toBe("a");
    expect(pickActiveSiteId(["a", "b"], "ghost")).toBe("a");
  });
  it("returns empty string when there are no sites", () => {
    expect(pickActiveSiteId([], "x")).toBe("");
  });
});

describe("pickActiveLanguage", () => {
  const sites = [
    { id: "a", primaryLanguage: "fr" },
    { id: "b", primaryLanguage: "en" },
  ];
  it("returns the active site's language", () => {
    expect(pickActiveLanguage(sites, "b")).toBe("en");
    expect(pickActiveLanguage(sites, "a")).toBe("fr");
  });
  it("falls back to the first site when the active id is unknown", () => {
    expect(pickActiveLanguage(sites, "ghost")).toBe("fr");
  });
  it("uses DEFAULT_LANGUAGE when there are no sites or the language is blank", () => {
    expect(pickActiveLanguage([], "a")).toBe(DEFAULT_LANGUAGE);
    expect(pickActiveLanguage([{ id: "a", primaryLanguage: "" }], "a")).toBe(
      DEFAULT_LANGUAGE,
    );
  });
});
