import { eq } from 'drizzle-orm';
import { NextResponse } from 'next/server';
import { db } from '@/db/drizzle';
import { image as imageSchema } from '@/db/schema';
import { handleImageUpload } from '@/lib/image-upload';

export async function GET(req: Request) {
  try {
    const { searchParams } = new URL(req.url);
    const projectId = searchParams.get('projectId');

    let images;
    if (projectId) {
      images = await db.select().from(imageSchema).where(eq(imageSchema.projectId, projectId));
    } else {
      images = await db.select().from(imageSchema);
    }
    return NextResponse.json(images);
  } catch (error) {
    console.error('Error fetching images:', error);
    return NextResponse.json(
      { message: 'Failed to fetch images' },
      { status: 500 }
    );
  }
}

export async function POST(req: Request) {
  try {
    const formData = await req.formData();
    const projectId = formData.get('projectId') as string;
    const images = formData.getAll('images') as File[];

    if (!projectId || images.length === 0) {
      return NextResponse.json(
        { message: 'Project ID and at least one image are required' },
        { status: 400 }
      );
    }

    const uploadedImageUrls = await Promise.all(
      images.map((image) => handleImageUpload(image, null))
    );

    const newImages = uploadedImageUrls.map((url) => ({
      id: crypto.randomUUID(),
      projectId,
      url,
      createdAt: new Date(),
      updatedAt: new Date(),
    }));

    await db.insert(imageSchema).values(newImages);

    return NextResponse.json({ success: true }, { status: 201 });
  } catch (error) {
    console.error('Error uploading images:', error);
    return NextResponse.json(
      { message: 'Failed to upload images' },
      { status: 500 }
    );
  }
}
