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";
import { semPrecos } from "@/lib/loja/regras-da-loja";
import { comEstoqueV2 } from "@/lib/estoque-v2-da-loja.server";

/*
  Um produto completo (variacoes, faixas, combinacoes) para o "compre junto"
  configurar o item sugerido. Antes o navegador consultava `products` direto
  com a chave publica, levando junto colunas de custo e precos que a regra da
  loja pode esconder. Agora e o servidor que entrega, so o que a vitrine usa
  e so o que este visitante pode ver.
*/

export const dynamic = "force-dynamic";

const COLUNAS =
  "id,user_id,name,description,price,image_url,stock,active,show_in_catalog,unit_type,price_on_request,use_variation_price_only," +
  "min_sale_qty_enabled,min_sale_qty,max_sale_qty_enabled,max_sale_qty,allowed_sale_qty_enabled,allowed_sale_quantities," +
  "track_inventory,inventory_scope,inventory_attribute_name,allow_negative_stock,custom_fields_config," +
  "shipping_weight_kg,shipping_width_cm,shipping_height_cm,shipping_length_cm,production_time_value,production_time_unit";

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);
  const slug = String(searchParams.get("slug") || "").trim().toLowerCase();
  const id = String(searchParams.get("id") || "").trim();
  if (!slug || !/^[0-9a-f-]{36}$/i.test(id)) return NextResponse.json({ error: "Produto inválido." }, { 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 } = await admin
      .from("products")
      .select(
        `${COLUNAS}, product_attributes(id,name,options,position,is_required,allow_multiple,display_style,show_in_store), product_variations(id,combination,price,stock,sku), product_price_tiers(min_qty,max_qty,unit_price,sort_order,active), product_images(id,image_url,sort_order,is_primary)`
      )
      .eq("id", id)
      .eq("user_id", String(dados.profile.id))
      .eq("active", true)
      .eq("show_in_catalog", true)
      .maybeSingle();
    if (!data) return NextResponse.json({ error: "Produto não encontrado." }, { status: 404 });
    /* Estoque v2: a marca de quem decide o estoque (fora do v2, intacto). */
    const [produto] = await comEstoqueV2(admin, String(dados.profile.id), [data as Record<string, unknown>]);

    return NextResponse.json({ produto: visao.mostrarPreco ? produto : semPrecos(produto), texto_sem_preco: visao.textoNoLugarDoPreco });
  } catch {
    return NextResponse.json({ error: "Não foi possível carregar o produto." }, { status: 500 });
  }
}
