import { NextResponse } from "next/server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { createAdminClient, createClient } from "@/lib/supabase-server";
import { filaDeProducao } from "@/lib/precificacao/tempo-de-producao.server";

/**
 * A fila de produção contra a capacidade do mês, para o kanban.
 *
 * Horas previstas do que ainda não saiu da produção, as horas produtivas
 * que a empresa informou, quantos dias úteis a fila ocupa e o próximo prazo
 * livre. Sem horas produtivas, só a fila — e o aviso de onde informar.
 */
export async function GET() {
  try {
    const supabase = await createClient();
    const {
      data: { user },
    } = await supabase.auth.getUser();
    if (!user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });

    const ctx = await getCompanyContext(supabase, user);
    if (!canCompany(ctx, user.id, "production.read")) {
      return NextResponse.json({ error: "Sem permissão." }, { status: 403 });
    }

    const donos = ctx.tenantIds?.length ? ctx.tenantIds : [user.id];
    const resultado = await filaDeProducao(createAdminClient(), donos, ctx.companyId);
    if (resultado.erro) return NextResponse.json({ error: resultado.erro }, { status: 400 });

    return NextResponse.json({
      ok: true,
      fila: resultado.fila,
      capacidade: resultado.capacidade,
      expediente: resultado.expediente,
    });
  } catch (error) {
    const message = error instanceof Error ? error.message : "Erro ao calcular a fila de produção.";
    return NextResponse.json({ error: message }, { status: 500 });
  }
}
