import { registrarFontesDaMarca, type DocumentoDoBanner, type FonteDaMarca } from "./documento";

/*
 * As fontes com glifos (as "fontes com perninha" da sublimação): manuscritas
 * do Google Fonts (licença OFL) com letras alternativas de floreio, letra
 * inicial e final com cauda e enfeites soltos. O Google entrega ao navegador a
 * fonte cortada em pedaços e deixa os enfeites de fora; por isso estas ficam
 * INTEIRAS no depósito da Ktalogu (.cache/banner/fontes-com-glifos/
 * baixar-e-subir.mjs) e entram pelo caminho das fontes da marca: a página
 * leva a fonte junto (fontesProprias) e o download, o link público e o
 * servidor desenham igual ao editor.
 */

const DEPOSITO = "https://ptpstwltddugnnlewvbw.supabase.co/storage/v1/object/public/products/editor-modelos/fontes-com-glifos";

const fonte = (chave: string, nome: string): FonteDaMarca => ({ chave: `kit-${chave}`, nome, url: `${DEPOSITO}/kit-${chave}.ttf` });

export const FONTES_COM_GLIFOS: FonteDaMarca[] = [
  fonte("birthstonebounce", "Birthstone Bounce"),
  fonte("stylescript", "Style Script"),
  fonte("playball", "Playball"),
  fonte("italianno", "Italianno"),
  fonte("greatvibesglifos", "Great Vibes (com glifos)"),
  fonte("pacificoglifos", "Pacifico (com glifos)"),
  fonte("norican", "Norican"),
  fonte("fuggles", "Fuggles"),
  fonte("comforter", "Comforter"),
  fonte("festive", "Festive"),
];

const CHAVES = new Set(FONTES_COM_GLIFOS.map((f) => f.chave));
export const ehFonteComGlifos = (chave: string) => CHAVES.has(chave);

/** Passam a valer como as fontes da marca (no editor, no servidor e no link público). */
export function registrarFontesComGlifos() {
  registrarFontesDaMarca(FONTES_COM_GLIFOS);
}

/* As fontes com glifos (kit-…) que a página usa vão junto com ela, como as da marca: o servidor, o download e o link público desenham com elas. */
export function comFontesComGlifos(pagina: DocumentoDoBanner): DocumentoDoBanner {
  const usadas = new Set(pagina.pecas.flatMap((p) => (p.tipo === "texto" ? [p.fonte, ...[...String(p.html || "").matchAll(/font-family:\s*'?([a-z0-9-]+)/gi)].map((x) => x[1])] : [])));
  const lista = FONTES_COM_GLIFOS.filter((f) => usadas.has(f.chave));
  if (!lista.length) return pagina;
  const proprias = [...(pagina.fontesProprias || []).filter((f) => !lista.some((x) => x.chave === f.chave)), ...lista];
  return { ...pagina, fontesProprias: proprias };
}
