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

// GET /api/admin/contacts - Fetch all contact submissions with pagination & filters
export async function GET(req: NextRequest) {
  const auth = requireAdmin(req);
  if (auth instanceof NextResponse) return auth;

  try {
    await dbConnect();
    const { searchParams } = new URL(req.url);

    const status = searchParams.get('status');
    const search = searchParams.get('search');
    const page = parseInt(searchParams.get('page') || '1', 10);
    const limit = parseInt(searchParams.get('limit') || '20', 10);
    const skip = (page - 1) * limit;

    const query: Record<string, any> = {};

    if (status && status !== 'all') {
      query.status = status;
    }

    if (search) {
      query.$or = [
        { name: { $regex: search, $options: 'i' } },
        { email: { $regex: search, $options: 'i' } },
        { subject: { $regex: search, $options: 'i' } },
        { message: { $regex: search, $options: 'i' } },
      ];
    }

    const total = await ContactUs.countDocuments(query);
    const unreadCount = await ContactUs.countDocuments({ status: 'unread' });
    const readCount = await ContactUs.countDocuments({ status: 'read' });
    const repliedCount = await ContactUs.countDocuments({ status: 'replied' });

    const contacts = await ContactUs.find(query)
      .populate('userId', 'name email phoneNumber')
      .sort({ createdAt: -1 })
      .skip(skip)
      .limit(limit);

    return NextResponse.json({
      success: true,
      stats: {
        totalAll: await ContactUs.countDocuments({}),
        unread: unreadCount,
        read: readCount,
        replied: repliedCount,
      },
      total,
      page,
      pages: Math.ceil(total / limit),
      count: contacts.length,
      contacts,
    });
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Server error fetching contact submissions' },
      { status: 500 }
    );
  }
}
