export const prerender = false;

import type { APIRoute } from 'astro';
import { env } from 'cloudflare:workers';
import { applyToCart } from '@platform-modules/commerce-cart';
import { getSession, type SessionEnv } from '../../../lib/session.js';
import { getDb, type DbEnv } from '../../../lib/db.js';
import { createStorefrontCartStore } from '../../../lib/cart-store.js';
import { type AuthEnv } from '../../../lib/auth-engine.js';
import { type StorefrontLimiterEnv } from '../../../lib/rate-limit.js';

export const POST: APIRoute = async ({ request, cookies, redirect }) => {
  const cfEnv = env as (AuthEnv & SessionEnv & DbEnv & StorefrontLimiterEnv) | undefined;

  const session = cfEnv ? await getSession(cfEnv, cookies) : null;
  if (!session) {
    return redirect('/login', 302);
  }

  const formData = await request.formData();
  const lineId = String(formData.get('lineId') ?? '');
  const qty = parseInt(String(formData.get('qty') ?? '1'), 10);

  const { db } = getDb(cfEnv!);
  const store = createStorefrontCartStore(db);

  await applyToCart(store, session.userId, { type: 'setQty', lineId, qty });

  return redirect('/cart', 302);
};
