import { resolveCatalogFonts } from "@/lib/catalog-fonts";

type PerfilAparencia = {
  catalog_advanced_enabled?: boolean | null;
  catalog_header_color?: string | null;
  catalog_header_text_color?: string | null;
  catalog_menu_color?: string | null;
  catalog_menu_text_color?: string | null;
  catalog_page_bg_color?: string | null;
  catalog_card_button_color?: string | null;
  catalog_font_heading?: string | null;
  catalog_font_body?: string | null;
  catalog_buybar_bg_color?: string | null;
  catalog_buybar_button_color?: string | null;
  catalog_buybar_text_color?: string | null;
};

export type CatalogAppearance = {
  enabled: boolean;
  headerColor: string | null;
  headerTextColor: string | null;
  menuColor: string | null;
  menuTextColor: string | null;
  pageBgColor: string | null;
  cardButtonColor: string | null;
  buyBar: { bg: string | null; button: string | null; text: string | null };
  fonts: { heading: string | null; body: string | null };
};

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

/**
 * Traduz o perfil da loja nas escolhas de aparencia avancada.
 *
 * Ponto unico onde a trava mora: com `catalog_advanced_enabled` falso tudo sai
 * nulo, e cada consumidor ja trata nulo como "usa o padrao". Assim nao existe
 * caminho em que uma loja que nunca abriu essa tela seja afetada, e desligar a
 * chave devolve a vitrine ao padrao sem apagar as escolhas gravadas.
 */
export function resolveCatalogAppearance(perfil: PerfilAparencia | null | undefined): CatalogAppearance {
  const vazio: CatalogAppearance = {
    enabled: false,
    headerColor: null,
    headerTextColor: null,
    menuColor: null,
    menuTextColor: null,
    pageBgColor: null,
    cardButtonColor: null,
    buyBar: { bg: null, button: null, text: null },
    fonts: { heading: null, body: null },
  };

  if (!perfil || perfil.catalog_advanced_enabled !== true) return vazio;

  return {
    enabled: true,
    headerColor: texto(perfil.catalog_header_color),
    headerTextColor: texto(perfil.catalog_header_text_color),
    menuColor: texto(perfil.catalog_menu_color),
    menuTextColor: texto(perfil.catalog_menu_text_color),
    pageBgColor: texto(perfil.catalog_page_bg_color),
    cardButtonColor: texto(perfil.catalog_card_button_color),
    buyBar: {
      bg: texto(perfil.catalog_buybar_bg_color),
      button: texto(perfil.catalog_buybar_button_color),
      text: texto(perfil.catalog_buybar_text_color),
    },
    fonts: resolveCatalogFonts({
      enabled: true,
      heading: perfil.catalog_font_heading,
      body: perfil.catalog_font_body,
    }),
  };
}
