export const prerender = false;

import type { APIRoute } from 'astro';
import { env } from 'cloudflare:workers';
import type { Transaction } from '@platform-modules/db';
import { setInventory, type InventorySchema } from '@platform-modules/commerce-inventory';
import { getSession, type SessionEnv } from '../../../../lib/session.js';
import { getTransactionalDb, type DbEnv } from '../../../../lib/db.js';
import { type AuthEnv } from '../../../../lib/auth-engine.js';
import { type StorefrontLimiterEnv } from '../../../../lib/rate-limit.js';

type AdminEnv = AuthEnv & SessionEnv & DbEnv & StorefrontLimiterEnv;

export const POST: APIRoute = async ({ request, cookies, params, redirect }) => {
  const cfEnv = env as AdminEnv | undefined;

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

  const skuId = params.variantId ?? '';
  const formData = await request.formData();
  const quantity = parseInt(String(formData.get('quantity') ?? '0'), 10);

  const { db } = getTransactionalDb(cfEnv!);
  await db.transaction(async (tx) => {
    await setInventory(tx as unknown as Transaction<InventorySchema>, {
      skuId,
      quantityTotal: quantity,
    });
  });

  return redirect('/admin/inventory', 302);
};
