import { NextResponse } from "next/server";
import { acessoDoChat } from "@/lib/chats/acesso";
import { createAdminClient } from "@/lib/supabase-server";

/*
  Quem está sentado no balcão.

  O Chats abre em aba separada e não tem o menu do sistema em volta: sem isto,
  ninguém sabe se quem está ali é o dono ou o funcionário que ficou logado na
  máquina do balcão — e a conversa sai assinada por quem não devia.
*/

const PAPEL: Record<string, string> = {
  owner: "Dono",
  admin: "Administrador",
  manager: "Gerente",
  financial: "Financeiro",
  production: "Produção",
  sales: "Vendas",
  viewer: "Só leitura",
};

export async function GET() {
  const acesso = await acessoDoChat();
  if ("erro" in acesso) return acesso.erro;

  const admin = createAdminClient();
  const { data } = await admin
    .from("profiles")
    .select("store_name,catalog_name,logo_url,catalog_logo_url")
    .eq("id", acesso.tenantIds[0])
    .maybeSingle();

  const perfil = data as
    | { store_name?: string | null; catalog_name?: string | null; logo_url?: string | null; catalog_logo_url?: string | null }
    | null;

  /* Sem vínculo de empresa, quem está logado é o próprio dono da conta. */
  const papel = acesso.ctx.membership?.role || "owner";

  return NextResponse.json({
    ok: true,
    eu: {
      id: acesso.user.id,
      nome: acesso.nome,
      email: acesso.email,
      avatar: acesso.avatar,
      papel: PAPEL[papel] || "Equipe",
      ehDono: papel === "owner" || papel === "admin",
      loja: String(perfil?.catalog_name || perfil?.store_name || "").trim() || null,
      logoDaLoja: perfil?.catalog_logo_url || perfil?.logo_url || null,
      podeResponder: acesso.podeResponderLoja,
      podeConfigurar: acesso.podeConfigurar,
    },
  });
}
