export interface WhatsAppTemplatesClient {
  product_inquiry?: string;
  cart_checkout_header?: string;
  cart_checkout_footer?: string;
  quote_share?: string;
  order_status?: string;
}

const DEFAULTS: WhatsAppTemplatesClient = {
  product_inquiry: "Olá! Tenho interesse no produto {{nome_produto}}",
  cart_checkout_header: "*Novo Pedido*",
  cart_checkout_footer: "{{resumo_itens}}\n\n{{subtotal}}\n{{desconto}}\n*Total: {{total}}*",
  quote_share: "Olá! Segue o orçamento #{{numero_orcamento}}. Total: {{total}}.{{validade}} {{link}}",
  order_status:
    "Olá! Segue atualização sobre seu pedido #{{numero_pedido}}. Status atual: *{{status}}*. Acompanhe o progresso em tempo real: {{link}}",
};

let cachedTemplates: WhatsAppTemplatesClient | null = null;
let fetchingPromise: Promise<WhatsAppTemplatesClient> | null = null;

export function getDefaultTemplatesClient(): WhatsAppTemplatesClient {
  return { ...DEFAULTS };
}

export function resolveTemplate(
  template: string | undefined,
  defaultTemplate: string,
  vars: Record<string, string>
): string {
  let message = template || defaultTemplate;
  for (const [key, value] of Object.entries(vars)) {
    message = message.replaceAll(`{{${key}}}`, value);
  }
  return message;
}

export async function fetchWhatsAppTemplates(): Promise<WhatsAppTemplatesClient> {
  if (cachedTemplates) return cachedTemplates;
  if (fetchingPromise) return fetchingPromise;

  fetchingPromise = (async () => {
    try {
      const res = await fetch("/api/whatsapp/templates");
      const data = await res.json();
      if (data.templates && typeof data.templates === "object") {
        cachedTemplates = { ...DEFAULTS, ...data.templates };
      } else {
        cachedTemplates = { ...DEFAULTS };
      }
    } catch {
      cachedTemplates = { ...DEFAULTS };
    }
    fetchingPromise = null;
    return cachedTemplates!;
  })();

  return fetchingPromise;
}

export function clearTemplatesCache() {
  cachedTemplates = null;
}
