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

// POST /api/contact - Public submission endpoint
export async function POST(req: NextRequest) {
  try {
    await dbConnect();
    const body = await req.json();

    const { isValid, errorResponse } = validateFields(body, ['name', 'email', 'subject', 'message']);
    if (!isValid) return errorResponse;

    const { name, email, subject, message } = body;

    // Check optional authenticated user
    const authUser = getAuthUser(req);
    const userId = authUser ? authUser.id : null;

    const contactEntry = await ContactUs.create({
      name: name.trim(),
      email: email.trim().toLowerCase(),
      subject: subject.trim(),
      message: message.trim(),
      userId,
      status: 'unread',
    });

    return NextResponse.json(
      {
        success: true,
        message: 'Your message has been submitted successfully! We will get back to you soon.',
        contact: contactEntry,
      },
      { status: 201 }
    );
  } catch (error: any) {
    return NextResponse.json(
      { success: false, error: error.message || 'Server error submitting contact message' },
      { status: 500 }
    );
  }
}
