// app/api/invoices/received/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { v4 as uuidv4 } from 'uuid';
import { promises as fs } from 'fs';
import path from 'path';
import { InvoiceStatus } from '@/types/types';
import { prisma } from '@/lib/prisma';

const uploadDir = path.join(process.cwd(), 'uploads/received-invoices');

export async function POST(request: NextRequest) {
  try {
    const formData = await request.formData();

    const data = JSON.parse(formData.get('data') as string);
    const pdfFile = formData.get('pdfFile') as File;

    if (!pdfFile || !pdfFile.type.includes('pdf')) {
      return NextResponse.json(
        { error: 'Un fichier PDF valide est requis' },
        { status: 400 }
      );
    }

    await fs.mkdir(uploadDir, { recursive: true });

    const fileName = `${uuidv4()}.pdf`;
    const filePath = path.join(uploadDir, fileName);

    const buffer = Buffer.from(await pdfFile.arrayBuffer());
    await fs.writeFile(filePath, buffer);

    const invoice = await prisma.invoice.create({
      data: {
        invoiceNumber: data.number,
        amount: parseFloat(data.amount),
        issueDate: new Date(data.date),
        dueDate: new Date(data.date),
        status: InvoiceStatus.OPEN,
        description: data.description,
        folderId: data.folderId,
      }
    });

    return NextResponse.json(invoice, { status: 201 });
  } catch (error) {
    console.error('Erreur lors de la création de la facture reçue:', error);
    return NextResponse.json(
      { error: "Échec de l'enregistrement de la facture" },
      { status: 500 }
    );
  }
}

export async function GET(request: NextRequest) {
  const { searchParams } = new URL(request.url);
  const file = searchParams.get('file');

  if (!file) {
    return NextResponse.json(
      { error: 'Paramètre file manquant' },
      { status: 400 }
    );
  }

  try {
    const filePath = path.join(uploadDir, file);
    const fileBuffer = await fs.readFile(filePath);

    return new Response(fileBuffer, {
      headers: {
        'Content-Type': 'application/pdf',
        'Content-Disposition': `inline; filename="${file}"`
      }
    });
  } catch (error) {
    console.error('Erreur de récupération du fichier:', error);
    return NextResponse.json(
      { error: 'Fichier non trouvé' },
      { status: 404 }
    );
  }
}



