import type { Pintura } from "./documento";

/*
 * Os degradês metálicos prontos (dourado, prata, rose gold...): faixas claras
 * e escuras alternadas em diagonal, que é o que faz parecer metal. Na
 * sublimação não existe tinta metálica: o brilho vem todo do degradê, e por
 * isso ele precisa de várias cores (com duas só fica "amarelo para marrom").
 */

const metal = (cores: string[], angulo = 135): Pintura => ({
  tipo: "linear",
  cor: cores[0],
  cor2: cores[cores.length - 1],
  angulo,
  paradas: cores.slice(1, -1).map((cor, i, meio) => ({ pos: Math.round(((i + 1) / (meio.length + 1)) * 1000) / 1000, cor })),
});

export const DEGRADES_METALICOS: Array<{ chave: string; nome: string; pintura: Pintura }> = [
  { chave: "dourado", nome: "Dourado", pintura: metal(["#BF953F", "#FCF6BA", "#B38728", "#FBF5B7", "#AA771C"]) },
  { chave: "ouro-velho", nome: "Ouro velho", pintura: metal(["#5C4314", "#C9A54C", "#7A5A1C", "#E3C77A", "#4E3810"]) },
  { chave: "champanhe", nome: "Champanhe", pintura: metal(["#B89D6E", "#FFF4DC", "#C9B08A", "#F7E9CC", "#A2875B"]) },
  { chave: "rose-gold", nome: "Rose gold", pintura: metal(["#B76E79", "#F6D3C8", "#C98B84", "#FBE3DA", "#A35D5F"]) },
  { chave: "prata", nome: "Prata", pintura: metal(["#7D7D7D", "#F5F5F5", "#A8A8A8", "#FFFFFF", "#868686"]) },
  { chave: "cromado", nome: "Cromado", pintura: metal(["#3A3A3A", "#E8E8E8", "#5E5E5E", "#FAFAFA", "#2B2B2B"], 180) },
  { chave: "bronze", nome: "Bronze", pintura: metal(["#6B3E1D", "#E0A96D", "#8C5A2B", "#F1C27D", "#5C3317"]) },
  { chave: "cobre", nome: "Cobre", pintura: metal(["#7A3B1E", "#F0A878", "#B35A2E", "#F7C29B", "#6B2E12"]) },
  { chave: "grafite", nome: "Grafite", pintura: metal(["#24272D", "#8B9099", "#3B3F47", "#A9AEB6", "#1E2025"]) },
  { chave: "holografico", nome: "Holográfico", pintura: metal(["#F5D0FE", "#A5F3FC", "#FDE68A", "#C4B5FD", "#FBCFE8"], 120) },
];

/** O metálico pelo nome ("dourado", "rose gold", "Prata"...), ou null. */
export function metalicoPeloNome(nome: string): Pintura | null {
  const limpo = nome
    .normalize("NFD")
    .replace(/[̀-ͯ]/g, "")
    .trim()
    .toLowerCase()
    .replace(/[\s_]+/g, "-");
  const achado = DEGRADES_METALICOS.find((m) => m.chave === limpo || m.chave.replace(/-/g, "") === limpo.replace(/-/g, ""));
  return achado ? { ...achado.pintura, paradas: achado.pintura.paradas?.map((p) => ({ ...p })) } : null;
}
