import { NextResponse } from "next/server";
import {
  addStorefrontCartItem,
  applyCartSessionCookies,
  getCartSessionFromRequestCookies,
  normalizeStorefrontCart,
} from "@/lib/storefront-cart";

export async function POST(request: Request) {
  try {
    const body = (await request.json()) as {
      id?: number;
      quantity?: number;
      variation?: Array<{
        attribute: string;
        value: string;
      }>;
    };

    if (!Number.isInteger(body.id) || Number(body.id) < 1) {
      return NextResponse.json(
        { message: "Neispravan proizvod za dodavanje." },
        { status: 400 },
      );
    }

    const quantity = Number.isInteger(body.quantity) ? Number(body.quantity) : 1;
    const session = await getCartSessionFromRequestCookies();
    const result = await addStorefrontCartItem(session, {
      id: Number(body.id),
      quantity: Math.max(1, quantity),
      variation: Array.isArray(body.variation) ? body.variation : undefined,
    });
    const cart = await normalizeStorefrontCart(result.payload);
    const response = NextResponse.json(cart, { status: 201 });

    applyCartSessionCookies(response, result.session);

    return response;
  } catch (error) {
    return NextResponse.json(
      {
        message:
          error instanceof Error
            ? error.message
            : "Dodavanje u košaricu nije uspjelo.",
      },
      { status: 500 },
    );
  }
}
