import { cookies } from "next/headers";
import { createAdminClient } from "@/lib/supabase-admin";

/*
  Quem está logado no portal do cliente, visto de uma página do catálogo.

  Serve para o coração de favorito e para o "Minha conta" saberem com quem
  estão falando. A leitura é silenciosa de propósito: o catálogo é público, e
  uma sessão vencida não pode derrubar a vitrine.
*/

export type ClienteDoPortal = {
  id: string;
  name: string;
  favorites: string[];
};

type ClienteSupabase = {
  rpc: (
    nome: string,
    argumentos: Record<string, unknown>
  ) => Promise<{ data: { client?: { id?: string; name?: string } } | null }>;
};

export async function lerClienteDoPortal(
  supabase: ClienteSupabase,
  slug: string
): Promise<ClienteDoPortal | null> {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get("ks_client_portal")?.value || "";
    if (!token) return null;

    const { data } = await supabase.rpc("client_portal_get_session", {
      p_slug: slug,
      p_session_token: token,
    });

    const id = String(data?.client?.id || "");
    if (!id) return null;

    let favoritos: string[] = [];
    try {
      const admin = createAdminClient();
      const { data: registro } = await admin.from("clients").select("favorites").eq("id", id).maybeSingle();
      if (Array.isArray(registro?.favorites)) favoritos = registro.favorites as string[];
    } catch {
      /* Sem a lista, o coração nasce vazio — melhor que a página quebrar. */
    }

    return { id, name: String(data?.client?.name || ""), favorites: favoritos };
  } catch {
    return null;
  }
}
