import { NextResponse } from "next/server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { createClient } from "@/lib/supabase-server";

/*
  Quem esta falando no Chats Ktalogu.

  A aba da equipe segue a pessoa (so ve o fio de quem participa); a aba da loja
  segue a permissao do modulo.

  As chaves `chats.*` herdam de Pedidos no catalogo: quem ja podia ver pedido
  continua vendo conversa, sem ninguem precisar reconfigurar nada. So no dia em
  que o dono marcar Chats no modal de permissoes e que as duas coisas passam a
  andar separadas — que e justamente o ponto de ter chave propria.
*/

function texto(valor: unknown) {
  return String(valor ?? "").trim();
}

export async function acessoDoChat() {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return { erro: NextResponse.json({ error: "Nao autenticado." }, { status: 401 }) } as const;

  const ctx = await getCompanyContext(supabase, user);
  const tenantIds = ctx.tenantIds?.length ? ctx.tenantIds : [user.id];
  const nome = texto(user.user_metadata?.name || user.user_metadata?.full_name || user.email) || "Eu";
  const podeVerLoja = canCompany(ctx, user.id, "chats.read");
  const podeResponderLoja = canCompany(ctx, user.id, "chats.write");
  const podeConfigurar = canCompany(ctx, user.id, "chats.settings");
  const email = texto(user.email);
  const avatar = texto(user.user_metadata?.avatar_url || user.user_metadata?.picture) || null;

  return {
    user,
    ctx,
    tenantIds,
    nome,
    email,
    avatar,
    podeVerLoja,
    podeResponderLoja,
    podeConfigurar,
  } as const;
}

export function normalizarBusca(valor: string) {
  return String(valor || "")
    .toLowerCase()
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "");
}
