import { NextResponse } from "next/server" import { getServerSession } from "next-auth/next" import { authOptions } from "@/lib/auth" import { writeFile } from "fs/promises" import path from "path" import fs from "fs" export async function POST(req: Request) { try { const session = await getServerSession(authOptions) if (!session || (session.user.role !== "MOD" && session.user.role !== "ADMIN")) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) } const formData = await req.formData() const file = formData.get("file") as File | null if (!file) { return NextResponse.json({ error: "No file uploaded" }, { status: 400 }) } if (!file.type.startsWith("image/")) { return NextResponse.json({ error: "Only image files are allowed" }, { status: 400 }) } const bytes = await file.arrayBuffer() const buffer = Buffer.from(bytes) const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9) const ext = path.extname(file.name) || ".jpg" const filename = `cover-${uniqueSuffix}${ext}` const uploadDir = path.join(process.cwd(), "public", "uploads", "covers") // Ensure directory exists if (!fs.existsSync(uploadDir)) { fs.mkdirSync(uploadDir, { recursive: true }) } const filepath = path.join(uploadDir, filename) await writeFile(filepath, buffer) return NextResponse.json({ url: `/uploads/covers/${filename}` }) } catch (error: any) { console.error("Cover upload error:", error) return NextResponse.json({ error: error.message || "Failed to upload cover" }, { status: 500 }) } }