import { NextResponse } from "next/server";
import { createClient } from "@/utils/supabase/server";
import { createAdminClient } from "@/lib/supabase-server";
import { getCompanyContext, shouldUseEmployeeUi } from "@/lib/company-context";
import { verificarDominioPersonalizado } from "@/lib/dominio-personalizado";

/* A conferência mora em lib/dominio-personalizado.ts, que o assistente também usa. */

async function resolvePublicCatalogAccess(supabase: Awaited<ReturnType<typeof createClient>>) {
  const {
    data: { user },
  } = await supabase.auth.getUser();

  if (!user) {
    return {
      errorResponse: NextResponse.json({ error: "Usuário não autenticado." }, { status: 401 }),
    } as const;
  }

  const ctx = await getCompanyContext(supabase, user);

  return {
    user,
    publicProfileId: ctx.ownerId || user.id,
    canManageIdentity: !shouldUseEmployeeUi(ctx, user.id),
  } as const;
}

export async function POST() {
  try {
    const supabase = await createClient();
    const access = await resolvePublicCatalogAccess(supabase);
    if ("errorResponse" in access) return access.errorResponse;
    if (!access.canManageIdentity) {
      return NextResponse.json(
        { error: "Somente administrador pode validar o link público da empresa." },
        { status: 403 }
      );
    }

    const resultado = await verificarDominioPersonalizado(createAdminClient(), access.publicProfileId);
    if (!resultado.ok) {
      return NextResponse.json(
        {
          error: resultado.error,
          ...(resultado.data ? { data: resultado.data } : {}),
          ...(resultado.details ? { details: resultado.details } : {}),
        },
        { status: resultado.status }
      );
    }

    return NextResponse.json({ ok: true, data: resultado.data });
  } catch (error) {
    const message = error instanceof Error ? error.message : "Erro ao validar domínio.";
    return NextResponse.json({ error: message }, { status: 500 });
  }
}
