import { resolveCatalogAppearance } from "@/lib/catalog-appearance";
import type { VendorAparencia } from "./VendorShell";

/*
  As escolhas de aparência da loja, traduzidas para o Vendor.

  Mora num lugar só porque as quatro páginas do template (home, categoria,
  busca e produto) precisam exatamente do mesmo objeto — e porque uma opção
  esquecida numa delas aparece como "a personalização não funciona".

  Cor e fonte passam pela trava `catalog_advanced_enabled`, que é onde o
  sistema decide se a loja abriu a personalização avançada. Aviso, efeito de
  logo, nome no cabeçalho e tarja de benefícios não passam por ela: são
  configurações do catálogo comum, e valem sempre.
*/

type PerfilDaLoja = Record<string, unknown>;

function texto(valor: unknown) {
  const limpo = String(valor ?? "").trim();
  return limpo || null;
}

function numero(valor: unknown) {
  const n = Number(valor);
  return Number.isFinite(n) ? n : null;
}

export function aparenciaDoVendor(perfil: PerfilDaLoja | null | undefined): VendorAparencia {
  const p = (perfil || {}) as Record<string, unknown>;
  const avancado = resolveCatalogAppearance(p as never);

  const tarjaBruta = Array.isArray(p.catalog_info_strip_items) ? p.catalog_info_strip_items : [];

  return {
    corDoCabecalho: avancado.headerColor,
    corDoTextoDoCabecalho: avancado.headerTextColor,
    corDoMenu: avancado.menuColor,
    corDoTextoDoMenu: avancado.menuTextColor,
    corDoFundo: avancado.pageBgColor,
    corDoBotaoDoCard: avancado.cardButtonColor,
    fonteDosTitulos: avancado.fonts.heading,
    fonteDoTexto: avancado.fonts.body,

    corDoRodape: texto(p.catalog_footer_color),
    corDoTextoDoRodape: texto(p.catalog_footer_text_color),
    corDosIconesDoCabecalho: texto(p.catalog_header_icon_color),

    mostrarNome: p.catalog_show_name_in_header === true,
    mostrarSlogan: p.catalog_show_slogan_in_header === true,
    corDoNome: texto(p.catalog_name_color),
    corDoSlogan: texto(p.catalog_slogan_color),

    avisoLigado: p.catalog_announcement_enabled === true,
    avisoTexto: texto(p.catalog_announcement_text),
    avisoCorDeFundo: texto(p.catalog_announcement_background_color),
    avisoCorDoTexto: texto(p.catalog_announcement_text_color),
    avisoBotaoRotulo: texto(p.catalog_announcement_button_label),
    avisoBotaoUrl: texto(p.catalog_announcement_button_url),
    avisoMostrarSelo: p.catalog_announcement_show_coupon_badge !== false,
    avisoCorDoSelo: texto(p.catalog_announcement_coupon_badge_color),
    avisoContagemLigada: p.catalog_announcement_countdown_enabled === true,
    avisoContagemAte: texto(p.catalog_announcement_countdown_end_at),
    avisoFixo: p.catalog_announcement_sticky !== false,

    logoEfeitoLigado: p.catalog_logo_effect_enabled === true,
    logoEfeitoTipo: texto(p.catalog_logo_effect),
    logoEfeitoVelocidade: numero(p.catalog_logo_effect_speed),
    logoEfeitoIntensidade: numero(p.catalog_logo_effect_intensity),

    tarjaLigada: p.catalog_info_strip_enabled !== false,
    tarjaItens: (tarjaBruta as Array<Record<string, unknown>>)
      .map((item) => ({
        icon: texto(item?.icon),
        title: texto(item?.title),
        subtitle: texto(item?.subtitle),
      }))
      .filter((item) => item.title || item.subtitle),
  };
}
