import type { SupabaseClient } from "@supabase/supabase-js";

import { lojaDoAdmin } from "@/lib/endereco-da-loja";
import { origemPublicaDoAdmin } from "@/lib/origem-publica";

/**
 * O que a área de produtos digitais precisa saber da loja: o nome e a cor
 * (padrões da área de membros), o endereço público e o domínio próprio, se
 * houver um verificado.
 */

export type LojaDosDigitais = {
  id: string;
  nome: string;
  cor: string | null;
  logo: string | null;
  slug: string | null;
  dominio: string | null;
};

export async function lerLojaDosDigitais(admin: SupabaseClient, lojaId: string): Promise<LojaDosDigitais> {
  const [perfil, dominio] = await Promise.all([
    admin
      .from("profiles")
      .select("store_name,catalog_name,primary_color,catalog_logo_url,logo_url,slug")
      .eq("id", lojaId)
      .maybeSingle(),
    admin
      .from("profile_custom_domains")
      .select("domain,verified")
      .eq("profile_id", lojaId)
      .eq("verified", true)
      .limit(1),
  ]);
  const p = (perfil.data ?? {}) as Record<string, unknown>;
  const texto = (valor: unknown) => (typeof valor === "string" && valor.trim() ? valor.trim() : null);
  const linhaDoDominio = ((dominio.data ?? []) as Array<{ domain?: unknown }>)[0];
  return {
    id: lojaId,
    nome: texto(p.catalog_name) ?? texto(p.store_name) ?? "Sua loja",
    cor: texto(p.primary_color),
    logo: texto(p.catalog_logo_url) ?? texto(p.logo_url),
    slug: texto(p.slug),
    dominio: texto(linhaDoDominio?.domain)?.toLowerCase() ?? null,
  };
}

/** Onde a loja atende: o domínio próprio verificado ou o endereço da Ktalogu. */
export function enderecoDaLoja(request: Request, loja: Pick<LojaDosDigitais, "slug" | "dominio">): string | null {
  if (loja.dominio) return `https://${loja.dominio}`;
  if (!loja.slug) return null;
  const configurado = String(process.env.NEXT_PUBLIC_PUBLIC_CATALOG_BASE_URL || process.env.PUBLIC_CATALOG_BASE_URL || "")
    .trim()
    .replace(/\/+$/, "");
  const base = configurado || lojaDoAdmin(origemPublicaDoAdmin(request));
  return `${base}/${loja.slug}`;
}

/** O endereço da área de membros da loja. */
export function enderecoDaAreaDeMembros(request: Request, loja: Pick<LojaDosDigitais, "slug" | "dominio">): string | null {
  const base = enderecoDaLoja(request, loja);
  return base ? `${base}/membros` : null;
}
