export const prerender = false;

import type { APIRoute } from 'astro';
import { env } from 'cloudflare:workers';
import type { Querier } from '@platform-modules/db';
import { moderateReview, type ReviewsSchema } from '@platform-modules/commerce-reviews';
import { getSession, type SessionEnv } from '../../../../lib/session.js';
import { getDb, 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 reviewId = params.id ?? '';
  const formData = await request.formData();
  const action = String(formData.get('_action') ?? '') as 'approve' | 'reject';

  const { db } = getDb(cfEnv!);
  await moderateReview(db as unknown as Querier<ReviewsSchema>, reviewId, action);

  return redirect('/admin/reviews?action=done', 302);
};
