import { NextResponse } from "next/server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { chanceGlobal, type DadosDaChanceGlobal } from "@/lib/chance-global";
import { createAdminClient, createClient } from "@/lib/supabase-server";

export const runtime = "nodejs";

/*
  A chance de fechar do orçamento "no geral" (a da faixa do orçamento): a
  taxa da empresa, a relação do cliente com ela, o valor e o tempo aberto.
  A conta e de onde saem os pesos estão em lib/chance-global.ts.

  Os fatos vêm da função dados_da_chance_de_fechar, que só a chave de
  serviço chama: aqui se confere antes que o orçamento é da empresa de quem
  pede e que a pessoa pode ver orçamentos.
*/

const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;

export async function GET(_req: Request, contexto: { params: Promise<{ id: string }> }) {
  const { id } = await contexto.params;
  if (!UUID.test(id)) return NextResponse.json({ error: "Orçamento inválido." }, { status: 400 });

  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });
  const empresa = await getCompanyContext(supabase, user);
  if (!canCompany(empresa, user.id, "quotes.read")) {
    return NextResponse.json({ error: "Sem permissão para ver este orçamento." }, { status: 403 });
  }
  const tenantIds = empresa.tenantIds?.length ? empresa.tenantIds : [user.id];
  const { data: orcamento } = await supabase.from("quotes").select("id").eq("id", id).in("user_id", tenantIds).maybeSingle();
  if (!orcamento) return NextResponse.json({ error: "Orçamento não encontrado." }, { status: 404 });

  const { data, error } = await createAdminClient().rpc("dados_da_chance_de_fechar", { p_orcamento: id });
  if (error) return NextResponse.json({ error: "Não deu para calcular a chance agora." }, { status: 500 });
  return NextResponse.json(chanceGlobal((data as DadosDaChanceGlobal | null) ?? null), { headers: { "cache-control": "no-store" } });
}
