import { NextRequest, NextResponse } from 'next/server';
import path from 'path';
import fs from 'fs';

// Handle OPTIONS preflight request for CORS
export async function OPTIONS() {
  return new NextResponse(null, {
    status: 200,
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'POST, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, Authorization',
    },
  });
}

// POST /api/upload - Uploads file directly to local server storage
export async function POST(req: NextRequest) {
  try {
    const formData = await req.formData();
    const file = formData.get('file') as File | null;
    const category = (formData.get('category') as string) || 'images';

    if (!file) {
      return NextResponse.json(
        { success: false, error: 'No file uploaded' },
        { status: 400, headers: { 'Access-Control-Allow-Origin': '*' } }
      );
    }

    const bytes = await file.arrayBuffer();
    const buffer = Buffer.from(bytes);

    const ext = file.name.split('.').pop()?.toLowerCase() || 'png';
    let subFolder = 'images';
    if (['mp4', 'mkv', 'webm', 'mov', 'avi'].includes(ext)) {
      subFolder = 'videos';
    } else if (['pdf'].includes(ext)) {
      subFolder = 'pdfs';
    } else if (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) {
      subFolder = 'images';
    } else {
      subFolder = 'documents';
    }

    const sanitizedFilename = file.name.replace(/[^a-zA-Z0-9.-]/g, '_');
    const filename = `${Date.now()}-${sanitizedFilename}`;

    // Target upload directories in public/uploads/<subFolder>
    const uploadDir = path.join(process.cwd(), 'public', 'uploads', subFolder);
    if (!fs.existsSync(uploadDir)) {
      fs.mkdirSync(uploadDir, { recursive: true });
    }

    const filePath = path.join(uploadDir, filename);
    fs.writeFileSync(filePath, buffer);

    const baseUrl = process.env.NEXT_PUBLIC_API_URL
      ? process.env.NEXT_PUBLIC_API_URL.replace('/api', '')
      : 'http://localhost:5000';

    const fileUrl = `${baseUrl}/uploads/${subFolder}/${filename}`;

    return NextResponse.json(
      {
        success: true,
        fileKey: `${subFolder}/${filename}`,
        fileUrl,
        url: fileUrl,
        filename,
        originalName: file.name,
        size: file.size,
      },
      {
        status: 201,
        headers: { 'Access-Control-Allow-Origin': '*' },
      }
    );
  } catch (error: any) {
    console.error('Server File Upload Error:', error);
    return NextResponse.json(
      { success: false, error: error.message || 'File upload failed' },
      { status: 500, headers: { 'Access-Control-Allow-Origin': '*' } }
    );
  }
}

