import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { getSupabaseClient } from "@/lib/supabase";
import ClientPortalAuthCard from "@/components/ClientPortalAuthCard";
import { regrasDaLoja } from "@/lib/loja/regras-da-loja";

export const revalidate = 0;
export const dynamic = "force-dynamic";

export async function generateMetadata(props: { params: Promise<{ slug: string }> }): Promise<Metadata> {
  const params = await props.params;
  const supabase = getSupabaseClient();
  const { data: profile } = await supabase
    .from("profiles")
    .select("catalog_name,store_name")
    .eq("slug", params.slug)
    .maybeSingle();

  const storeName =
    (profile as { catalog_name?: string | null; store_name?: string | null } | null)?.catalog_name ||
    (profile as { catalog_name?: string | null; store_name?: string | null } | null)?.store_name ||
    "Loja";

  return {
    title: `Área do Cliente | ${storeName}`,
    description: `Acesse a área do cliente da loja ${storeName}.`,
  };
}

export default async function ClientPortalLoginPage(props: { params: Promise<{ slug: string }> }) {
  const params = await props.params;
  const slug = params.slug;
  const supabase = getSupabaseClient();

  const { data: profile } = await supabase
    .from("profiles")
    .select(
      "slug,catalog_name,store_name,catalog_logo_url,logo_url,primary_color,catalog_signup_mode,catalog_signup_require_cnpj,catalog_login_message,catalog_price_mode,catalog_access_mode"
    )
    .eq("slug", slug)
    .maybeSingle();

  if (!profile) return notFound();

  const typedProfile = profile as {
    slug: string;
    catalog_name?: string | null;
    store_name?: string | null;
    catalog_logo_url?: string | null;
    logo_url?: string | null;
    primary_color?: string | null;
  };

  const storeName = typedProfile.catalog_name || typedProfile.store_name || "Loja";
  const logoUrl = typedProfile.catalog_logo_url || typedProfile.logo_url || "";
  const primaryColor = typedProfile.primary_color || "#4425A7";
  /* As regras da loja decidem a tela: cadastro fechado esconde o "Primeiro
     acesso", loja so com CNPJ pede CNPJ, e o recado do lojista aparece. */
  const regras = regrasDaLoja(profile as Record<string, unknown>);

  return (
    <ClientPortalAuthCard
      slug={typedProfile.slug}
      storeName={storeName}
      logoUrl={logoUrl}
      primaryColor={primaryColor}
      modoDeCadastro={regras.modoDeCadastro}
      exigirCnpj={regras.exigirCnpj}
      mensagemDeLogin={regras.mensagemDeLogin}
      precoSoParaClientes={regras.modoDePreco === "clients" || regras.modoDeAcesso === "clients"}
    />
  );
}
