import { NextResponse } from "next/server";
import { abrirEstoque, UUID } from "@/lib/estoque/servidor";
import { lerItens } from "@/lib/estoque/leituras.server";

type Params = { params: Promise<{ id: string }> };

/*
 * Para receber uma compra no estoque novo: cada linha da compra, o item do
 * estoque que ela abastece (pelo vínculo do material do fornecedor) e, se o
 * item tem grade, as células para escolher em qual entra.
 * Fora do v2: { v2: false } e a tela de recebimento fica como sempre.
 */
export async function GET(_req: Request, { params }: Params) {
  const r = await abrirEstoque(["suppliers.list.write", "suppliers.list.read", "suppliers.read"]);
  if (!r.ok) return r.resposta;
  if (!r.e.v2) return NextResponse.json({ v2: false, linhas: [] });
  const { id } = await params;
  if (!UUID.test(id)) return NextResponse.json({ error: "Compra não encontrada." }, { status: 404 });

  const { data: compra } = await r.e.admin
    .from("supplier_purchase_orders")
    .select("id")
    .eq("id", id)
    .in("company_id", r.e.ids)
    .maybeSingle();
  if (!compra) return NextResponse.json({ error: "Compra não encontrada." }, { status: 404 });

  const { data: linhas } = await r.e.admin
    .from("supplier_purchase_order_items")
    .select("id,material_id,estoque_celula_id,supplier_materials(linked_material_id)")
    .eq("purchase_order_id", id)
    .limit(300);
  const lista =
    (linhas as unknown as Array<{ id: string; material_id: string | null; estoque_celula_id: string | null; supplier_materials: { linked_material_id: string | null } | null }> | null) ?? [];
  const itens = await lerItens(r.e, {
    ids: Array.from(new Set(lista.map((l) => l.supplier_materials?.linked_material_id).filter((x): x is string => Boolean(x)))),
  });

  return NextResponse.json({
    v2: true,
    linhas: lista.map((l) => {
      const item = itens.find((i) => i.id === l.supplier_materials?.linked_material_id) ?? null;
      return {
        linha_id: l.id,
        celula_id: l.estoque_celula_id,
        item: item ? { id: item.id, nome: item.nome, unidade: item.unidade, grade: item.grade, papel: item.papel, celulas: item.celulas } : null,
      };
    }),
  });
}
