import { caixaDoTraco, novoId, solida, type Peca, type PecaDeForma, type PecaDeTraco, type Pintura } from "./documento";
import { ICONES_EXTRAS } from "./icones-extras";
import { forma, icone, texto } from "./pecas-novas";

/*
 * Pacotes prontos: datas especiais (cada um um conjunto de peças no meio da
 * arte) e elementos 3D (formas com luz fora do centro, sombra por dentro e
 * por fora, que parecem objetos). Usam os mesmos recursos do editor (degradê
 * de várias cores, efeitos juntos), então tudo continua editável.
 */

type Medida = { largura: number; altura: number };
export type PacotePronto = { chave: string; nome: string; criar: (m: Medida) => Peca[] };

const lado = (m: Medida) => Math.min(m.largura, m.altura);
const naAltura = <T extends Peca>(p: T, y: number): T => ({ ...p, y });
const desenhado = (m: Medida, chave: string, cor: string, tamanho: number, x: number, y: number) => ({ ...icone(m, `lucide-${chave}`, cor, { desenho: ICONES_EXTRAS[chave], espessura: 1.8 }), w: tamanho, h: tamanho, x, y });
const radial = (cor: string, cor2: string, x: number, y: number, raio: number, paradas?: Pintura["paradas"]): Pintura => ({ tipo: "radial", cor, cor2, angulo: 0, pontos: { x1: x, y1: y, x2: x + raio, y2: y }, ...(paradas ? { paradas } : {}) });

export const DATAS_ESPECIAIS: PacotePronto[] = [
  {
    chave: "natal",
    nome: "Natal",
    criar: (m) => {
      const l = lado(m);
      const caixa = forma(m, "retangulo", l * 0.8, l * 0.38, "#C1121F", { raio: l * 0.05, pintura: { tipo: "linear", cor: "#E63946", cor2: "#9D0208", angulo: 160 }, efeitos: [{ tipo: "sombra", cor: "#000000", x: 0, y: l * 0.02, desfoque: l * 0.05, opacidade: 0.35 }] });
      const titulo = naAltura(texto(m, { texto: "Feliz Natal", fonte: "great-vibes", peso: 400, tamanho: l * 0.15, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.74, l * 0.18), caixa.y + l * 0.07);
      const sub = naAltura(texto(m, { texto: "BOAS FESTAS", fonte: "montserrat", peso: 800, tamanho: l * 0.04, espaco: 0.3, pintura: solida("#FFD60A"), alinhamento: "centro" }, l * 0.6, l * 0.06), caixa.y + l * 0.26);
      const pinheiro = desenhado(m, "pinheiro", "#FFD60A", l * 0.14, m.largura / 2 - l * 0.07, caixa.y - l * 0.12);
      const flocos = [
        desenhado(m, "floco-de-neve", "#FFFFFF", l * 0.07, caixa.x + l * 0.03, caixa.y + l * 0.03),
        desenhado(m, "floco-de-neve", "#FFFFFF", l * 0.05, caixa.x + caixa.w - l * 0.09, caixa.y + caixa.h - l * 0.09),
      ];
      return [caixa, ...flocos, titulo, sub, pinheiro];
    },
  },
  {
    chave: "black-friday",
    nome: "Black Friday",
    criar: (m) => {
      const l = lado(m);
      const caixa = forma(m, "retangulo", l * 0.86, l * 0.46, "#0A0A0A", { raio: l * 0.02 });
      const black = naAltura(texto(m, { texto: "BLACK", fonte: "anton", peso: 400, tamanho: l * 0.17, espaco: 0.04, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.8, l * 0.18), caixa.y + l * 0.03);
      const friday = naAltura(texto(m, { texto: "FRIDAY", fonte: "anton", peso: 400, tamanho: l * 0.17, espaco: 0.04, pintura: { tipo: "linear", cor: "#FFD400", cor2: "#FF2D87", angulo: 90 }, alinhamento: "centro", efeitos: [{ tipo: "brilho", cor: "#FF2D87", x: 0, y: 0, desfoque: l * 0.05, opacidade: 0.7 }] }, l * 0.8, l * 0.18), caixa.y + l * 0.19);
      const selo = { ...forma(m, "retangulo", l * 0.42, l * 0.08, "#FF2D87", { raio: l * 0.04 }), y: caixa.y + caixa.h - l * 0.05 };
      const oferta = naAltura(texto(m, { texto: "ATÉ 70% OFF", fonte: "montserrat", peso: 900, tamanho: l * 0.045, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.42, l * 0.08), selo.y);
      return [caixa, black, friday, selo, oferta];
    },
  },
  {
    chave: "dia-das-maes",
    nome: "Dia das Mães",
    criar: (m) => {
      const l = lado(m);
      const fundo = forma(m, "circulo", l * 0.62, l * 0.62, "#FCE7F3", { pintura: radial("#FFFFFF", "#FBCFE8", 0.4, 0.35, 0.75) });
      const coracao = desenhado(m, "coracao-lucide", "#DB2777", l * 0.12, m.largura / 2 - l * 0.06, fundo.y + l * 0.08);
      const titulo = naAltura(texto(m, { texto: "Feliz Dia das Mães", fonte: "dancing-script", peso: 700, tamanho: l * 0.09, pintura: solida("#9D174D"), alinhamento: "centro", linha: 1 }, l * 0.56, l * 0.24), fundo.y + l * 0.2);
      const flor = desenhado(m, "flor", "#DB2777", l * 0.09, m.largura / 2 - l * 0.045, fundo.y + l * 0.46);
      return [fundo, coracao, titulo, flor];
    },
  },
  {
    chave: "dia-dos-pais",
    nome: "Dia dos Pais",
    criar: (m) => {
      const l = lado(m);
      const caixa = forma(m, "retangulo", l * 0.78, l * 0.34, "#1E3A8A", { raio: l * 0.03, pintura: { tipo: "linear", cor: "#1E40AF", cor2: "#0F172A", angulo: 135 } });
      const coroa = desenhado(m, "coroa-lucide", "#FBBF24", l * 0.11, m.largura / 2 - l * 0.055, caixa.y - l * 0.08);
      const titulo = naAltura(texto(m, { texto: "FELIZ DIA DOS PAIS", fonte: "montserrat", peso: 900, tamanho: l * 0.07, espaco: 0.04, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.74, l * 0.1), caixa.y + l * 0.08);
      const sub = naAltura(texto(m, { texto: "o presente perfeito está aqui", fonte: "poppins", peso: 500, tamanho: l * 0.04, pintura: solida("#BFDBFE"), alinhamento: "centro" }, l * 0.7, l * 0.06), caixa.y + l * 0.2);
      return [caixa, coroa, titulo, sub];
    },
  },
  {
    chave: "pascoa",
    nome: "Páscoa",
    criar: (m) => {
      const l = lado(m);
      const ovo = forma(m, "circulo", l * 0.5, l * 0.6, "#FEF3C7", { pintura: radial("#FFFFFF", "#FDE68A", 0.4, 0.3, 0.8, [{ pos: 0.6, cor: "#FEF3C7" }]) });
      const coelho = desenhado(m, "coelho", "#7C3AED", l * 0.16, m.largura / 2 - l * 0.08, ovo.y + l * 0.08);
      const titulo = naAltura(texto(m, { texto: "Feliz Páscoa", fonte: "pacifico", peso: 400, tamanho: l * 0.08, pintura: solida("#7C3AED"), alinhamento: "centro" }, l * 0.48, l * 0.12), ovo.y + l * 0.28);
      const ovinho = desenhado(m, "ovo", "#F59E0B", l * 0.07, m.largura / 2 - l * 0.035, ovo.y + l * 0.44);
      return [ovo, coelho, titulo, ovinho];
    },
  },
  {
    chave: "namorados",
    nome: "Dia dos Namorados",
    criar: (m) => {
      const l = lado(m);
      const coracao = forma(m, "coracao", l * 0.56, l * 0.5, "#E11D48", { pintura: radial("#FB7185", "#9F1239", 0.35, 0.3, 0.8), efeitos: [{ tipo: "sombra-interna", cor: "#4C0519", x: l * -0.01, y: l * -0.015, desfoque: l * 0.04, opacidade: 0.4 }, { tipo: "sombra", cor: "#000000", x: 0, y: l * 0.02, desfoque: l * 0.05, opacidade: 0.3 }] });
      const titulo = naAltura(texto(m, { texto: "Dia dos\nNamorados", fonte: "great-vibes", peso: 400, tamanho: l * 0.085, linha: 0.95, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.46, l * 0.2), coracao.y + l * 0.1);
      const brilho = desenhado(m, "brilhos", "#FFD60A", l * 0.08, coracao.x + coracao.w - l * 0.08, coracao.y - l * 0.02);
      return [coracao, titulo, brilho];
    },
  },
  /* Datas da vida e da empresa (não só do comércio): aniversário, chá de bebê, casamento, formatura... Sem sombra, para sair limpo na impressão. */
  {
    chave: "aniversario",
    nome: "Aniversário",
    criar: (m) => {
      const l = lado(m);
      const caixa = forma(m, "retangulo", l * 0.8, l * 0.36, "#7C3AED", { raio: l * 0.05, pintura: { tipo: "linear", cor: "#A855F7", cor2: "#EC4899", angulo: 120 } });
      const titulo = naAltura(texto(m, { texto: "Feliz Aniversário", fonte: "pacifico", peso: 400, tamanho: l * 0.085, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.74, l * 0.14), caixa.y + l * 0.07);
      const sub = naAltura(texto(m, { texto: "MUITOS ANOS DE VIDA", fonte: "montserrat", peso: 800, tamanho: l * 0.035, espaco: 0.25, pintura: solida("#FDE68A"), alinhamento: "centro" }, l * 0.66, l * 0.06), caixa.y + l * 0.23);
      const bolo = desenhado(m, "bolo", "#FDE68A", l * 0.13, m.largura / 2 - l * 0.065, caixa.y - l * 0.15);
      const festa = [desenhado(m, "festa", "#FFFFFF", l * 0.07, caixa.x + l * 0.03, caixa.y + l * 0.03), desenhado(m, "brilhos", "#FFFFFF", l * 0.06, caixa.x + caixa.w - l * 0.09, caixa.y + caixa.h - l * 0.09)];
      return [caixa, ...festa, titulo, sub, bolo];
    },
  },
  {
    chave: "parabens",
    nome: "Parabéns",
    criar: (m) => {
      const l = lado(m);
      const titulo = texto(m, { texto: "PARABÉNS!", fonte: "bowlby-one", peso: 400, tamanho: l * 0.12, espaco: 0.02, pintura: { tipo: "linear", cor: "#F59E0B", cor2: "#EF4444", angulo: 90, paradas: [{ pos: 0.5, cor: "#EC4899" }] }, alinhamento: "centro" }, l * 0.84, l * 0.16);
      const sub = naAltura(texto(m, { texto: "que seu dia seja incrível", fonte: "dancing-script", peso: 700, tamanho: l * 0.06, pintura: solida("#7C3AED"), alinhamento: "centro" }, l * 0.7, l * 0.09), titulo.y + l * 0.16);
      const chapeu = desenhado(m, "chapeu-de-festa", "#EC4899", l * 0.1, m.largura / 2 - l * 0.05, titulo.y - l * 0.12);
      return [titulo, sub, chapeu];
    },
  },
  {
    chave: "cha-de-bebe",
    nome: "Chá de bebê",
    criar: (m) => {
      const l = lado(m);
      const fundo = forma(m, "circulo", l * 0.6, l * 0.6, "#E0F2FE", { pintura: radial("#FFFFFF", "#BAE6FD", 0.4, 0.35, 0.75) });
      const bebe = desenhado(m, "bebe", "#0284C7", l * 0.13, m.largura / 2 - l * 0.065, fundo.y + l * 0.08);
      const titulo = naAltura(texto(m, { texto: "Chá de Bebê", fonte: "pacifico", peso: 400, tamanho: l * 0.08, pintura: solida("#075985"), alinhamento: "centro" }, l * 0.54, l * 0.12), fundo.y + l * 0.24);
      const nome = naAltura(texto(m, { texto: "do Davi", fonte: "montserrat", peso: 700, tamanho: l * 0.045, pintura: solida("#0369A1"), alinhamento: "centro" }, l * 0.5, l * 0.07), fundo.y + l * 0.37);
      return [fundo, bebe, titulo, nome];
    },
  },
  {
    chave: "casamento",
    nome: "Casamento",
    criar: (m) => {
      const l = lado(m);
      const ouro: Pintura = { tipo: "linear", cor: "#BF953F", cor2: "#AA771C", angulo: 135, paradas: [{ pos: 0.25, cor: "#FCF6BA" }, { pos: 0.5, cor: "#B38728" }, { pos: 0.75, cor: "#FBF5B7" }] };
      const moldura = forma(m, "retangulo", l * 0.7, l * 0.42, "#FFFFFF", { raio: l * 0.02, pintura: { tipo: "nenhuma", cor: "#FFFFFF", cor2: "#FFFFFF", angulo: 0 }, borda: { cor: "#B38728", largura: Math.max(2, l * 0.006) } });
      const aliancas = desenhado(m, "alianca", "#B38728", l * 0.1, m.largura / 2 - l * 0.05, moldura.y + l * 0.04);
      const nomes = naAltura(texto(m, { texto: "Ana & Pedro", fonte: "great-vibes", peso: 400, tamanho: l * 0.1, pintura: ouro, alinhamento: "centro" }, l * 0.64, l * 0.14), moldura.y + l * 0.15);
      const data = naAltura(texto(m, { texto: "12 · 12 · 2026", fonte: "montserrat", peso: 600, tamanho: l * 0.035, espaco: 0.3, pintura: solida("#6B5B3E"), alinhamento: "centro" }, l * 0.6, l * 0.06), moldura.y + l * 0.31);
      return [moldura, aliancas, nomes, data];
    },
  },
  {
    chave: "formatura",
    nome: "Formatura",
    criar: (m) => {
      const l = lado(m);
      const ouro: Pintura = { tipo: "linear", cor: "#BF953F", cor2: "#AA771C", angulo: 135, paradas: [{ pos: 0.25, cor: "#FCF6BA" }, { pos: 0.5, cor: "#B38728" }, { pos: 0.75, cor: "#FBF5B7" }] };
      const caixa = forma(m, "retangulo", l * 0.78, l * 0.34, "#111827", { raio: l * 0.03, pintura: { tipo: "linear", cor: "#1F2937", cor2: "#030712", angulo: 150 } });
      const capelo = desenhado(m, "capelo", "#FCD34D", l * 0.13, m.largura / 2 - l * 0.065, caixa.y - l * 0.1);
      const titulo = naAltura(texto(m, { texto: "FORMATURA", fonte: "cinzel", peso: 700, tamanho: l * 0.075, espaco: 0.12, pintura: ouro, alinhamento: "centro" }, l * 0.72, l * 0.11), caixa.y + l * 0.08);
      const turma = naAltura(texto(m, { texto: "Turma 2026", fonte: "montserrat", peso: 600, tamanho: l * 0.04, espaco: 0.1, pintura: solida("#E5E7EB"), alinhamento: "centro" }, l * 0.6, l * 0.06), caixa.y + l * 0.21);
      return [caixa, capelo, titulo, turma];
    },
  },
  {
    chave: "dia-das-criancas",
    nome: "Dia das Crianças",
    criar: (m) => {
      const l = lado(m);
      const cores = ["#EF4444", "#F59E0B", "#22C55E", "#3B82F6", "#A855F7"];
      const palavra = "CRIANÇAS";
      const linha1 = texto(m, { texto: "Dia das", fonte: "baloo-2", peso: 800, tamanho: l * 0.06, pintura: solida("#1F2937"), alinhamento: "centro" }, l * 0.5, l * 0.08);
      const html = [...palavra].map((c, i) => `<span style="color:${cores[i % cores.length]}">${c}</span>`).join("");
      const titulo = naAltura(texto(m, { texto: palavra, html, fonte: "bowlby-one", peso: 400, tamanho: l * 0.1, pintura: solida("#EF4444"), alinhamento: "centro" }, l * 0.84, l * 0.13), linha1.y + l * 0.07);
      const pirulito = desenhado(m, "pirulito", "#EC4899", l * 0.09, m.largura / 2 - l * 0.045, titulo.y + l * 0.13);
      return [linha1, titulo, pirulito];
    },
  },
  {
    chave: "inauguracao",
    nome: "Inauguração",
    criar: (m) => {
      const l = lado(m);
      const faixa = forma(m, "faixa", l * 0.86, l * 0.16, "#DC2626", { pintura: { tipo: "linear", cor: "#EF4444", cor2: "#B91C1C", angulo: 180 } });
      const titulo = naAltura(texto(m, { texto: "INAUGURAÇÃO", fonte: "anton", peso: 400, tamanho: l * 0.09, espaco: 0.04, pintura: solida("#FFFFFF"), alinhamento: "centro" }, l * 0.76, l * 0.12), faixa.y + l * 0.02);
      const loja = desenhado(m, "loja-lucide", "#DC2626", l * 0.12, m.largura / 2 - l * 0.06, faixa.y - l * 0.15);
      const sub = naAltura(texto(m, { texto: "venha conhecer o nosso espaço", fonte: "poppins", peso: 600, tamanho: l * 0.04, pintura: solida("#1F2937"), alinhamento: "centro" }, l * 0.76, l * 0.06), faixa.y + l * 0.19);
      return [loja, faixa, titulo, sub];
    },
  },
  {
    chave: "obrigado",
    nome: "Agradecimento",
    criar: (m) => {
      const l = lado(m);
      const titulo = texto(m, { texto: "Obrigado pela preferência!", fonte: "dancing-script", peso: 700, tamanho: l * 0.085, linha: 1, pintura: solida("#7C3AED"), alinhamento: "centro" }, l * 0.74, l * 0.22);
      const coracao = desenhado(m, "coracao-lucide", "#EC4899", l * 0.08, m.largura / 2 - l * 0.04, titulo.y - l * 0.1);
      const sub = naAltura(texto(m, { texto: "FEITO COM CARINHO PARA VOCÊ", fonte: "montserrat", peso: 700, tamanho: l * 0.03, espaco: 0.2, pintura: solida("#4B5563"), alinhamento: "centro" }, l * 0.7, l * 0.05), titulo.y + l * 0.22);
      return [coracao, titulo, sub];
    },
  },
];

/** O cubo em perspectiva: 3 faces (desenho fechado), cada uma com a sua luz. */
function cubo(m: Medida): PecaDeTraco[] {
  const l = lado(m) * 0.36;
  const cx = m.largura / 2;
  const cy = m.altura / 2;
  const topo: Array<[number, number]> = [[cx, cy - l * 0.58], [cx + l * 0.5, cy - l * 0.29], [cx, cy], [cx - l * 0.5, cy - l * 0.29]];
  const esquerda: Array<[number, number]> = [[cx - l * 0.5, cy - l * 0.29], [cx, cy], [cx, cy + l * 0.58], [cx - l * 0.5, cy + l * 0.29]];
  const direita: Array<[number, number]> = [[cx, cy], [cx + l * 0.5, cy - l * 0.29], [cx + l * 0.5, cy + l * 0.29], [cx, cy + l * 0.58]];
  const face = (pontos: Array<[number, number]>, pintura: Pintura, nome: string): PecaDeTraco => {
    const caixa = caixaDoTraco(pontos.map(([x, y]) => ({ x, y })), 0, true);
    return { id: novoId("tr"), tipo: "traco", nome, x: caixa.x, y: caixa.y, w: caixa.w, h: caixa.h, rot: 0, opacidade: 1, pontos: caixa.pontos, fechado: true, suave: false, cor: "#000000", espessura: 0, tracejado: "solido", inicio: "nada", fim: "nada", preenchimento: pintura, sombra: null };
  };
  return [
    face(topo, { tipo: "linear", cor: "#C4B5FD", cor2: "#A78BFA", angulo: 180 }, "Cubo: topo"),
    face(esquerda, { tipo: "linear", cor: "#7C3AED", cor2: "#5B21B6", angulo: 180 }, "Cubo: lado"),
    face(direita, { tipo: "linear", cor: "#6D28D9", cor2: "#3B0764", angulo: 180 }, "Cubo: frente"),
  ];
}

const sombraDeChao = (l: number) => ({ tipo: "sombra" as const, cor: "#000000", x: 0, y: l * 0.05, desfoque: l * 0.08, opacidade: 0.35 });

export const ELEMENTOS_3D: PacotePronto[] = [
  { chave: "esfera", nome: "Esfera", criar: (m) => [forma(m, "circulo", lado(m) * 0.4, lado(m) * 0.4, "#7C3AED", { pintura: radial("#FFFFFF", "#1E0B4B", 0.32, 0.28, 0.85, [{ pos: 0.18, cor: "#C4B5FD" }, { pos: 0.55, cor: "#7C3AED" }]), efeitos: [sombraDeChao(lado(m) * 0.4)] }) as PecaDeForma] },
  { chave: "bolha", nome: "Bolha de vidro", criar: (m) => [forma(m, "circulo", lado(m) * 0.4, lado(m) * 0.4, "#FFFFFF", { pintura: radial("#FFFFFF", "#38BDF8", 0.3, 0.25, 0.9, [{ pos: 0.2, cor: "#E0F2FE" }]), opacidade: 0.85, efeitos: [{ tipo: "sombra-interna", cor: "#0369A1", x: 0, y: 0, desfoque: lado(m) * 0.06, opacidade: 0.45 }, { tipo: "brilho", cor: "#7DD3FC", x: 0, y: 0, desfoque: lado(m) * 0.06, opacidade: 0.6 }] }) as PecaDeForma] },
  { chave: "moeda", nome: "Moeda", criar: (m) => [forma(m, "circulo", lado(m) * 0.34, lado(m) * 0.34, "#F59E0B", { pintura: { tipo: "linear", cor: "#FDE68A", cor2: "#B45309", angulo: 135, paradas: [{ pos: 0.35, cor: "#F59E0B" }, { pos: 0.6, cor: "#FCD34D" }] }, efeitos: [{ tipo: "contorno", cor: "#92400E", x: 0, y: 0, desfoque: 0, opacidade: 1, largura: lado(m) * 0.008 }, { tipo: "sombra-interna", cor: "#78350F", x: lado(m) * 0.008, y: lado(m) * 0.01, desfoque: lado(m) * 0.02, opacidade: 0.5 }, sombraDeChao(lado(m) * 0.34)] }) as PecaDeForma] },
  { chave: "estrela-3d", nome: "Estrela", criar: (m) => [forma(m, "estrela", lado(m) * 0.42, lado(m) * 0.42, "#FBBF24", { pintura: radial("#FEF9C3", "#D97706", 0.4, 0.3, 0.75, [{ pos: 0.4, cor: "#FBBF24" }]), efeitos: [{ tipo: "sombra-interna", cor: "#92400E", x: lado(m) * 0.006, y: lado(m) * 0.01, desfoque: lado(m) * 0.02, opacidade: 0.5 }, sombraDeChao(lado(m) * 0.42)] }) as PecaDeForma] },
  { chave: "coracao-3d", nome: "Coração", criar: (m) => [forma(m, "coracao", lado(m) * 0.42, lado(m) * 0.38, "#F43F5E", { pintura: radial("#FFE4E6", "#9F1239", 0.3, 0.25, 0.85, [{ pos: 0.3, cor: "#FB7185" }]), efeitos: [{ tipo: "sombra-interna", cor: "#4C0519", x: lado(m) * -0.008, y: lado(m) * -0.01, desfoque: lado(m) * 0.03, opacidade: 0.35 }, sombraDeChao(lado(m) * 0.42)] }) as PecaDeForma] },
  { chave: "botao-3d", nome: "Botão", criar: (m) => [forma(m, "retangulo", lado(m) * 0.5, lado(m) * 0.14, "#22C55E", { raio: lado(m) * 0.07, pintura: { tipo: "linear", cor: "#86EFAC", cor2: "#15803D", angulo: 180, paradas: [{ pos: 0.45, cor: "#22C55E" }] }, efeitos: [{ tipo: "sombra-interna", cor: "#FFFFFF", x: 0, y: lado(m) * 0.006, desfoque: lado(m) * 0.01, opacidade: 0.6 }, { tipo: "sombra", cor: "#14532D", x: 0, y: lado(m) * 0.012, desfoque: 0, opacidade: 0.9 }, sombraDeChao(lado(m) * 0.3)] }) as PecaDeForma] },
  { chave: "anel-3d", nome: "Anel", criar: (m) => [forma(m, "anel", lado(m) * 0.4, lado(m) * 0.4, "#06B6D4", { pintura: radial("#CFFAFE", "#155E75", 0.35, 0.3, 0.8, [{ pos: 0.45, cor: "#06B6D4" }]), efeitos: [sombraDeChao(lado(m) * 0.4)] }) as PecaDeForma] },
  { chave: "cubo", nome: "Cubo", criar: (m) => cubo(m) },
];
