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

/**
 * As duas metades da ficha de um lote de produtos: quanto é matéria-prima e
 * quanto é processo (mão de obra e máquina).
 *
 * É o que o orçamento precisa para calcular a contribuição de cada item — a
 * proporção divide o custo, e a parte de processo fica DENTRO da
 * contribuição, porque é custo fixo sendo recuperado. Produto fora da lista
 * de resposta não tem ficha: o custo inteiro deve ser tratado como
 * matéria-prima, o lado conservador.
 */
export async function GET(req: Request) {
  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, "pricing.read")) {
    return NextResponse.json({ error: "Sem permissão." }, { status: 403 });
  }

  const ids = (new URL(req.url).searchParams.get("ids") ?? "")
    .split(",")
    .map((v) => v.trim())
    .filter(Boolean)
    .slice(0, 200);
  if (ids.length === 0) return NextResponse.json({ ok: true, fichas: {} });

  const admin = createAdminClient();
  const donos = ctx.tenantIds?.length ? ctx.tenantIds : [ctx.companyId];

  /* Amarra nos donos: id de produto de outra empresa volta vazio, porque a
     chave de serviço ignora RLS. */
  const { data: produtos, error } = await admin
    .from("products")
    .select("id,product_materials(cost_total),product_processes(cost_total)")
    .in("id", ids)
    .in("user_id", donos);
  if (error) return NextResponse.json({ error: error.message }, { status: 400 });

  const soma = (linhas: unknown): number =>
    Array.isArray(linhas)
      ? linhas.reduce((acc: number, l) => acc + (Number((l as { cost_total?: unknown })?.cost_total ?? 0) || 0), 0)
      : 0;

  const fichas: Record<string, { materiais: number; processos: number }> = {};
  for (const p of produtos ?? []) {
    fichas[p.id] = {
      materiais: Math.round(soma(p.product_materials) * 100) / 100,
      processos: Math.round(soma(p.product_processes) * 100) / 100,
    };
  }

  return NextResponse.json({ ok: true, fichas });
}
