import { NextRequest, NextResponse } from 'next/server';
import { PrismaClient } from '@prisma/client';
import formidable from 'formidable';
import path from 'path';

export const config = {
  api: {
    bodyParser: false,
  },
};

const prisma = new PrismaClient();

function parseForm(req: NextRequest): Promise<{ fields: formidable.Fields; files: formidable.Files }> {
  const form = formidable({ multiples: false, uploadDir: './public/uploads', keepExtensions: true });
  return new Promise((resolve, reject) => {
    form.parse(req as any, (err, fields, files) => {
      if (err) reject(err);
      else resolve({ fields, files });
    });
  });
}

export async function POST(req: NextRequest) {
  try {
    const { fields, files } = await parseForm(req);
    const file = files.file;
    const clientId = fields.clientId;
    const section = fields.section;
    if (!file || !clientId) {
      return NextResponse.json({ error: 'Fichier ou clientId manquant' }, { status: 400 });
    }
    const uploadedFile = Array.isArray(file) ? file[0] : file;
    const fileName = path.basename(uploadedFile.filepath);
    const filePath = `/uploads/${fileName}`;
    const document = await prisma.document.create({
      data: {
        name: uploadedFile.originalFilename || fileName,
        fileType: uploadedFile.mimetype || '',
        path: filePath,
        client: { connect: { id: parseInt(clientId as string) } },
        documentCategory: section ? String(section) : undefined,
      },
    });
    return NextResponse.json(document, { status: 200 });
  } catch (e) {
    return NextResponse.json({ error: 'Erreur lors de l\'upload ou de la sauvegarde du document' }, { status: 500 });
  }
} 