import { NextResponse } from "next/server";
import { createAdminClient } from "@/lib/supabase-admin";
import { carregarLoja } from "@/lib/loja/dados-da-loja";
import { lerVisaoDaLoja } from "@/lib/loja/visao.server";

/*
  Peso, medidas da embalagem e prazo de producao dos produtos do carrinho, e
  se o produto permite estoque negativo (o saldo nao limita a venda).

  A cotacao do frete (no carrinho, na finalizacao e no servidor) monta o pacote
  com esses numeros. Nem todo caminho que poe produto no carrinho os tinha: o
  "adicionar" do card le a grade enxuta da loja (sem peso nem medidas) e o
  Vendor montava o item a mao sem eles. O carrinho pergunta aqui o que falta,
  e confere uma vez por visita o que ja tinha, para nao cotar com um pacote
  que a loja mudou depois.
*/

export const dynamic = "force-dynamic";

const LIMITE_DE_PRODUTOS = 60;

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);
  const slug = String(searchParams.get("slug") || "").trim().toLowerCase();
  const ids = Array.from(
    new Set(
      String(searchParams.get("ids") || "")
        .split(",")
        .map((id) => id.trim())
        .filter((id) => /^[0-9a-f-]{36}$/i.test(id))
    )
  ).slice(0, LIMITE_DE_PRODUTOS);
  if (!slug || ids.length === 0) return NextResponse.json({ error: "Produtos inválidos." }, { status: 400 });

  try {
    const dados = await carregarLoja(slug);
    if (!dados?.profile) return NextResponse.json({ error: "Loja não encontrada." }, { status: 404 });
    const { visao } = await lerVisaoDaLoja(slug, dados.profile);
    if (visao.exigeLoginNaLoja || visao.lojaFechada) return NextResponse.json({ error: "Entre na loja para continuar." }, { status: 401 });

    const admin = createAdminClient();
    const { data, error } = await admin
      .from("products")
      .select("id,shipping_weight_kg,shipping_width_cm,shipping_height_cm,shipping_length_cm,production_time_value,production_time_unit,allow_negative_stock")
      .in("id", ids)
      .eq("user_id", String(dados.profile.id));
    if (error) return NextResponse.json({ error: "Não foi possível carregar as medidas." }, { status: 500 });

    return NextResponse.json({ produtos: data || [] });
  } catch {
    return NextResponse.json({ error: "Não foi possível carregar as medidas." }, { status: 500 });
  }
}
