"use client";

import { ensureOrderPublicStatusToken, buildPublicOrderStatusUrl } from "@/lib/orders/public-status-link";
import { normalizePublicBaseUrl } from "@/lib/public-catalog-url";
import { getSupabaseClient } from "@/lib/supabase";

/**
 * O link público de acompanhamento do pedido — é nele que o cliente baixa a
 * nota fiscal. Gera o token se o pedido ainda não tiver, do mesmo jeito que o
 * botão "Link de status" da tela do pedido.
 */
export async function linkPublicoDoPedido(pedidoId: string): Promise<string | null> {
  const supabase = getSupabaseClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return null;

  const { data: pedido } = await supabase
    .from("orders")
    .select("id,user_id,share_token,share_enabled")
    .eq("id", pedidoId)
    .maybeSingle();
  if (!pedido) return null;

  const token = await ensureOrderPublicStatusToken({
    orderId: pedido.id,
    user,
    existingToken: pedido.share_token,
    existingEnabled: pedido.share_enabled,
  });

  const [{ data: perfil }, { data: dominio }] = await Promise.all([
    supabase.from("profiles").select("slug").eq("id", pedido.user_id).maybeSingle(),
    supabase.from("profile_custom_domains").select("domain,verified").eq("profile_id", pedido.user_id).maybeSingle(),
  ]);

  return buildPublicOrderStatusUrl(
    normalizePublicBaseUrl(window.location.origin),
    {
      slug: (perfil as { slug?: string | null } | null)?.slug ?? null,
      custom_domain: (dominio as { domain?: string | null } | null)?.domain ?? null,
      custom_domain_verified: Boolean((dominio as { verified?: boolean | null } | null)?.verified),
    },
    token
  );
}

export function numeroDeWhatsapp(telefone: string | null | undefined) {
  let digitos = String(telefone || "").replace(/\D/g, "");
  if (!digitos) return null;
  if (digitos.length <= 11) digitos = `55${digitos}`;
  return digitos.length >= 12 ? digitos : null;
}
