/*
  Os gabaritos que o produto oferece para download (aba Produção do editor:
  Illustrator, CorelDRAW, PDF e o link do Canva).

  O produto guarda a lista em `production_templates`. Os produtos antigos têm
  um gabarito só, nos campos `production_template_*`, e continuam valendo
  quando a lista está vazia. A mesma conta do ProductShowcase (modelo padrão);
  aqui para os modelos que desenham o bloco do jeito deles (o Vendor).
*/

export type FormatoDoGabarito = "ai" | "canva" | "cdr" | "pdf";

export type Gabarito = { formato: FormatoDoGabarito; url: string; nome: string };

type ProdutoComGabaritos = {
  production_templates?: Array<{ format?: string | null; url?: string | null; name?: string | null }> | null;
  production_template_url?: string | null;
  production_template_name?: string | null;
  production_template_format?: string | null;
};

const ORDEM: Record<FormatoDoGabarito, number> = { ai: 0, canva: 1, cdr: 2, pdf: 3 };

const ehFormato = (valor: unknown): valor is FormatoDoGabarito => valor === "ai" || valor === "canva" || valor === "cdr" || valor === "pdf";

export function gabaritosDoProduto(produto: ProdutoComGabaritos | null | undefined): Gabarito[] {
  if (!produto) return [];
  const lista = Array.isArray(produto.production_templates) ? produto.production_templates : [];
  const validos = lista
    .map((item) => {
      const formato = ehFormato(item?.format) ? item.format : null;
      const url = typeof item?.url === "string" ? item.url.trim() : "";
      const nome = typeof item?.name === "string" ? item.name.trim() : "";
      return formato && url ? { formato, url, nome: nome || "Gabarito" } : null;
    })
    .filter((item): item is Gabarito => item !== null)
    .sort((a, b) => ORDEM[a.formato] - ORDEM[b.formato]);
  if (validos.length > 0) return validos;

  const url = typeof produto.production_template_url === "string" ? produto.production_template_url.trim() : "";
  if (!url) return [];
  return [
    {
      formato: ehFormato(produto.production_template_format) ? produto.production_template_format : "pdf",
      url,
      nome: produto.production_template_name?.trim() || "Gabarito",
    },
  ];
}

export function nomeDoFormato(formato: FormatoDoGabarito) {
  return formato === "ai" ? "Illustrator" : formato === "canva" ? "Canva" : formato === "cdr" ? "CorelDRAW" : "PDF";
}

export const ICONE_DO_FORMATO: Record<FormatoDoGabarito, string> = {
  ai: "/icons/templates/ai.svg",
  canva: "/icons/templates/canva.svg",
  cdr: "/icons/templates/cdr.svg",
  pdf: "/icons/templates/pdf.svg",
};
