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

export async function GET(
  req: Request,
  { params }: { params: { id: string } }
) {
  try {
    const foundPage = await db
      .select()
      .from(page)
      .where(eq(page.id, params.id))
      .limit(1);

    if (foundPage.length === 0) {
      return NextResponse.json({ message: 'Page not found' }, { status: 404 });
    }

    return NextResponse.json(foundPage[0]);
  } catch (error) {
    console.error('Error fetching page:', error);
    return NextResponse.json(
      { message: 'Failed to fetch page' },
      { status: 500 }
    );
  }
}

export async function PUT(
  req: Request,
  { params }: { params: { id: string } }
) {
  try {
    const formData = await req.formData();

    const pageTitle = formData.get('pageTitle')?.toString() ?? '';
    const pageContents = formData.get('pageContents')?.toString() ?? '';
    const pageSlug = formData.get('pageSlug')?.toString() ?? '';
    const pageMore = formData.get('pageMore')?.toString() ?? '';
    const pageImageFile = formData.get('pageImage') as File | null;

    const existingPage = await db
      .select()
      .from(page)
      .where(eq(page.id, params.id))
      .limit(1);

    if (existingPage.length === 0) {
      return NextResponse.json({ message: 'Page not found' }, { status: 404 });
    }

    const imageUrl = await handleImageUpload(
      pageImageFile,
      existingPage[0].pageImage
    );

    const updatedPage = await db
      .update(page)
      .set({
        pageTitle,
        pageContents,
        pageImage: imageUrl,
        pageSlug,
        pageMore,
        updatedAt: new Date(),
      })
      .where(eq(page.id, params.id));

    return NextResponse.json(updatedPage, { status: 200 });
  } catch (error: any) {
    console.error('Error updating page:', error);
    return NextResponse.json(
      { message: error.message || 'Failed to update page' },
      { status: 500 }
    );
  }
}

export async function DELETE(
  req: Request,
  { params }: { params: { id: string } }
) {
  try {
    await db.delete(page).where(eq(page.id, params.id));
    return NextResponse.json({ message: 'Page deleted successfully' });
  } catch (error) {
    console.error('Error deleting page:', error);
    return NextResponse.json(
      { message: 'Failed to delete page' },
      { status: 500 }
    );
  }
}