import { describe, expect, it } from "vitest";
import { publicAssetHref } from "./public-asset";

/**
 * Test d'intégration aligné sur le scénario Gherkin `@int-public-asset-base-path` :
 * vérifie que tous les chemins d'assets publics référencés en dur dans l'app
 * (logo, tour d'accueil, fallback ingrédient, images catalogue) sont résolus
 * en respectant `import.meta.env.BASE_URL` (Vite `base`).
 */

const withBaseUrl = (baseUrl: string | undefined) => {
  // @ts-expect-error: Vitest laisse `import.meta.env` mutable pour les tests.
  import.meta.env.BASE_URL = baseUrl;
};

describe("publicAssetHref (Gherkin @int-public-asset-base-path)", () => {
  /** @int-public-asset-base-path */
  it("préfixe tous les chemins absolus par BASE_URL quand Vite expose un base path", () => {
    const previous = import.meta.env.BASE_URL;
    withBaseUrl("/ben-to/");

    try {
      // Logo (RootLayout)
      expect(publicAssetHref("/branding/onigiri-logo.png")).toBe("/ben-to/branding/onigiri-logo.png");
      // Tour d'accueil (WelcomeTourModal)
      expect(publicAssetHref("/tour/flow-builder.gif")).toBe("/ben-to/tour/flow-builder.gif");
      expect(publicAssetHref("/tour/recipe-sheet.gif")).toBe("/ben-to/tour/recipe-sheet.gif");
      // Fallback ingrédient (RecipeSheetSection)
      expect(publicAssetHref("/ingredient-unknown.png")).toBe("/ben-to/ingredient-unknown.png");
      // Images issues du catalogue (cover base / variante + recipeCover)
      expect(publicAssetHref("/recipe-covers/onigiri.jpg")).toBe("/ben-to/recipe-covers/onigiri.jpg");
      // Chemins déjà relatifs : on les promeut puis on applique le base
      expect(publicAssetHref("recipe-covers/onigiri.jpg")).toBe("/ben-to/recipe-covers/onigiri.jpg");
    } finally {
      withBaseUrl(previous);
    }
  });

  /** @int-public-asset-base-path */
  it("laisse les chemins intacts quand BASE_URL est la racine", () => {
    const previous = import.meta.env.BASE_URL;
    withBaseUrl("/");

    try {
      expect(publicAssetHref("/branding/onigiri-logo.png")).toBe("/branding/onigiri-logo.png");
      expect(publicAssetHref("/ingredient-unknown.png")).toBe("/ingredient-unknown.png");
    } finally {
      withBaseUrl(previous);
    }
  });
});
