import { createHmac } from "node:crypto";

/*
  A passagem que abre a PRÓPRIA loja num tema que ela ainda não usa, para os
  cartões de Catálogo > Personalização mostrarem a loja de verdade em cada
  tema (quadro em miniatura e "Ver em tela cheia").

  A loja confere em apps/public/src/lib/passagem-da-previa.ts: mesma conta,
  mesmo prefixo. O prefixo é outro que o do editor da página inicial
  ("editor-da-loja:v1:"): uma passagem nunca vale no lugar da outra. Assinada
  com a chave de serviço do Supabase, vale duas horas e leva:
  - u: o perfil dono da loja;
  - s: o slug;
  - o: a origem do painel que pediu (só registro);
  - e: quando vence.

  A passagem não grava nada e não abre o editor: na loja ela só deixa o
  ?tema= escolher o desenho da página inicial, sem contar visita.
*/

export const PREFIXO_DA_PREVIA = "previa-do-tema:v1:";
export const VALIDADE_DA_PREVIA_S = 2 * 60 * 60;

export function criarPassagemDaPrevia(
  dados: { dono: string; slug: string; origemDoPainel?: string; agoraS?: number },
  chave: string
): string {
  if (!chave) throw new Error("Sem a chave para assinar a prévia do tema.");
  const agora = dados.agoraS ?? Math.floor(Date.now() / 1000);
  const carga = Buffer.from(
    JSON.stringify({ u: dados.dono, s: dados.slug.toLowerCase(), o: dados.origemDoPainel || "", e: agora + VALIDADE_DA_PREVIA_S }),
    "utf8"
  ).toString("base64url");
  const assinatura = createHmac("sha256", chave).update(`${PREFIXO_DA_PREVIA}${carga}`).digest("hex");
  return `${carga}.${assinatura}`;
}
