/**
 * @fileoverview Utilitário para registar fontes locais no browser via @font-face.
 * Compatível com Vite: os ficheiros de fonte devem ser importados como módulos
 * para que o Vite processe os URLs correctamente.
 *
 * @module utils.loadFont
 *
 * @example
 * import sfFont from "../assets/fonts/SF Slapstick Comic Shaded.ttf";
 * import { registerFont } from "../../utils/loadFont";
 *
 * registerFont("SFSlapstick", sfFont, "truetype");
 */

/** @type {Set<string>} Nomes de famílias já registadas, para evitar duplicados. */
const _registadas = new Set();

/**
 * Regista uma fonte local no browser via @font-face dinâmico.
 * Idempotente: chamadas repetidas com o mesmo `familyName` são ignoradas.
 *
 * @param {string} familyName  - Nome CSS da família (ex: "SFSlapstick")
 * @param {string} fontUrl     - URL do ficheiro de fonte (vindo de um import Vite)
 * @param {string} [format]    - Formato da fonte: "truetype" | "opentype" | "woff" | "woff2"
 * @param {string} [weight]    - font-weight CSS (default: "normal")
 * @param {string} [style]     - font-style CSS (default: "normal")
 */
export function registerFont(
  familyName,
  fontUrl,
  format = "truetype",
  weight = "normal",
  style = "normal",
) {
  if (_registadas.has(familyName)) return;
  _registadas.add(familyName);

  const styleEl = document.createElement("style");
  styleEl.dataset.font = familyName;
  styleEl.textContent = `
    @font-face {
      font-family: '${familyName}';
      src: url('${fontUrl}') format('${format}');
      font-weight: ${weight};
      font-style: ${style};
    }
  `;
  document.head.appendChild(styleEl);

  // Inicia o carregamento imediato da fonte para que esteja pronta
  // antes da primeira utilização (evita o efeito de fonte em branco).
  document.fonts.load(`normal normal 60px '${familyName}'`).catch(() => {});
}
