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

// GET /api/banners - List banners
export async function GET(req: NextRequest) {
  try {
    await dbConnect();
    const user = getAuthUser(req);
    const isAdmin = user && (user.role === 'admin' || user.role === 'super_admin');

    const query: Record<string, any> = {};
    if (!isAdmin) {
      query.isActive = true;
    }

    const banners = await Banner.find(query).sort({ displayOrder: 1, createdAt: -1 });

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

// POST /api/banners - Admin creates a banner
export async function POST(req: NextRequest) {
  const auth = requireAdmin(req);
  if (auth instanceof NextResponse) return auth;

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

    const { isValid, errorResponse } = validateFields(body, ['title', 'imageUrl', 'linkUrl']);
    if (!isValid) return errorResponse;

    const banner = await Banner.create({
      title: body.title,
      subtitle: body.subtitle || '',
      imageUrl: body.imageUrl,
      linkUrl: body.linkUrl,
      ctaText: body.ctaText || 'Learn More',
      isActive: body.isActive !== undefined ? Boolean(body.isActive) : true,
      displayOrder: body.displayOrder ? Number(body.displayOrder) : 0,
    });

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