import assert from "node:assert/strict";
import {readFile} from "node:fs/promises";

const themeFile = (path) =>
    readFile(new URL(`../../${path}`, import.meta.url), "utf8");

const [controller, template, styles] = await Promise.all([
    themeFile("assets/controllers/bouzy_vineyard_map_controller.js"),
    themeFile("templates/partials/_bouzy_vineyard_map.html.twig"),
    themeFile("assets/css/components/_bouzy-vineyard-map.scss"),
]);

assert.match(
    controller,
    /neighbouringParcelsUrl:\s*String/u,
    "Le contrôleur doit déclarer la couche cadastrale des parcelles voisines.",
);
assert.match(
    controller,
    /features:\s*\[[\s\S]*parcels\.features[\s\S]*neighbouringParcels\.features/u,
    "Les parcelles voisines doivent rejoindre la couche interactive.",
);
assert.doesNotMatch(
    controller,
    /estateParcels\.features[\s\S]{0,160}51079/u,
    "Les parcelles Bandock ne doivent plus être filtrées sur la seule commune de Bouzy.",
);
assert.match(
    template,
    /data-bouzy-vineyard-map-neighbouring-parcels-url-value/u,
    "Le template doit fournir l’URL des parcelles voisines.",
);

assert.match(
    controller,
    /map\.on\('movestart zoomstart',\s*this\.dismissParcelDetailsOnMapMovement/u,
    "Un déplacement ou un zoom doit pouvoir fermer la fiche parcelle.",
);
assert.match(
    controller,
    /dismissParcelDetailsOnMapMovement\(\)[\s\S]*matchMedia\(MOBILE_VIEW_MEDIA_QUERY\)\.matches/u,
    "La fermeture automatique de la fiche doit rester limitée au mobile.",
);
assert.match(
    controller,
    /dismissParcelDetailsOnMapMovement\(\)[\s\S]*clearActiveParcelSelection\(\)[\s\S]*showDefaultDetails\(\)/u,
    "La fermeture doit réinitialiser la sélection et le contenu de la fiche.",
);

assert.match(
    styles,
    /\.bouzy-vineyard-map__video-callout\s*\{[\s\S]*?display:\s*none;/u,
    "La vignette vidéo fixe doit être masquée par défaut sur mobile.",
);
assert.match(
    styles,
    /@media \(min-width:\s*48rem\)[\s\S]*?\.bouzy-vineyard-map__video-callout\s*\{[\s\S]*?display:\s*block;/u,
    "La vignette vidéo fixe doit réapparaître à partir du breakpoint desktop.",
);

console.log(
    "OK — la carte ferme sa fiche sur mobile, masque la vignette fixe et affiche les parcelles voisines.",
);
