/**
 * محاسبه سبد خرید سمت سرور: POST /api/cart/preview
 * کلاینت فقط شناسه تنوع و تعداد را می‌فرستد؛ قیمت، موجودی، تخفیف و هزینه ارسال
 * همیشه در سرور محاسبه می‌شود تا قابل دستکاری نباشد.
 */
import { NextResponse } from "next/server";
import { z } from "zod";
import { priceCart } from "@/server/services/cart";

const body = z.object({
  lines: z
    .array(z.object({ variantId: z.string().regex(/^[A-Za-z0-9_-]{1,40}$/) /* هم شناسه‌های داده نمونه (v-13-1) و هم cuid محصولات پنل */, qty: z.number().int().min(1).max(10) }))
    .max(50),
  discountCode: z.string().trim().max(20).optional(),
  shippingMethodId: z.string().max(30).optional(),
  province: z.string().max(40).optional(),
});

export async function POST(req: Request) {
  const json = await req.json().catch(() => null);
  const parsed = body.safeParse(json);
  if (!parsed.success) return NextResponse.json({ error: "درخواست نامعتبر است" }, { status: 400 });
  return NextResponse.json(await priceCart(parsed.data));
}
