import { NextRequest, NextResponse } from 'next/server';
import { dbConnect } from '@/lib/dbConnect';
import { Banner } from '@/models/Banner';
import { requireAdmin } from '@/lib/auth';

// GET /api/banners/[id]
export async function GET(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    await dbConnect();
    const { id } = await params;
    const banner = await Banner.findById(id);
    if (!banner) {
      return NextResponse.json({ success: false, error: 'Banner not found' }, { status: 404 });
    }

    return NextResponse.json({ success: true, banner });
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Server error fetching banner' },
      { status: 500 }
    );
  }
}

// PUT /api/banners/[id] - Admin updates banner
export async function PUT(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const auth = requireAdmin(req);
  if (auth instanceof NextResponse) return auth;

  try {
    await dbConnect();
    const { id } = await params;
    const body = await req.json();

    const banner = await Banner.findById(id);
    if (!banner) {
      return NextResponse.json({ success: false, error: 'Banner not found' }, { status: 404 });
    }

    if (body.title !== undefined) banner.title = body.title;
    if (body.subtitle !== undefined) banner.subtitle = body.subtitle;
    if (body.imageUrl !== undefined) banner.imageUrl = body.imageUrl;
    if (body.linkUrl !== undefined) banner.linkUrl = body.linkUrl;
    if (body.ctaText !== undefined) banner.ctaText = body.ctaText;
    if (body.isActive !== undefined) banner.isActive = Boolean(body.isActive);
    if (body.displayOrder !== undefined) banner.displayOrder = Number(body.displayOrder);

    await banner.save();

    return NextResponse.json({
      success: true,
      message: 'Banner updated successfully',
      banner,
    });
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Server error updating banner' },
      { status: 500 }
    );
  }
}

// DELETE /api/banners/[id] - Admin deletes banner
export async function DELETE(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const auth = requireAdmin(req);
  if (auth instanceof NextResponse) return auth;

  try {
    await dbConnect();
    const { id } = await params;
    const deleted = await Banner.findByIdAndDelete(id);
    if (!deleted) {
      return NextResponse.json({ success: false, error: 'Banner not found' }, { status: 404 });
    }

    return NextResponse.json({
      success: true,
      message: 'Banner deleted successfully',
    });
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Server error deleting banner' },
      { status: 500 }
    );
  }
}
