import { NextRequest, NextResponse } from "next/server";
import { requirePaidApiUser } from "@/lib/api-auth";
import { PremiumRequiredError, premiumRequiredResponse } from "@/lib/entitlements";
import { saveUploadedFile, type UploadFileType } from "@/lib/jobs/create-job";

export const maxDuration = 120;

export async function POST(req: NextRequest) {
  const { error, user } = await requirePaidApiUser(req);
  if (error || !user) return error!;

  const formData = await req.formData();
  const file = formData.get("file") as File | null;
  const type = formData.get("type") as string | null;

  if (
    !file ||
    !type ||
    (type !== "image" && type !== "audio" && type !== "logo" && type !== "font")
  ) {
    return NextResponse.json(
      { error: "Provide multipart fields: file, type (image|audio|logo|font)" },
      { status: 400 },
    );
  }

  try {
    const result = await saveUploadedFile(user.id, file, type as UploadFileType, user.plan);
    return NextResponse.json(result);
  } catch (err) {
    if (err instanceof PremiumRequiredError) {
      return NextResponse.json(premiumRequiredResponse(err.message), { status: 403 });
    }
    const message = err instanceof Error ? err.message : "Upload failed";
    return NextResponse.json({ error: message }, { status: 400 });
  }
}
