import { NextRequest, NextResponse } from 'next/server'
import { getPayload } from 'payload'
import config from '@/payload.config'

/**
 * POST /api/consent - Record consent action
 * 
 * Request body:
 * {
 *   action: 'accept' | 'reject' | 'update',
 *   purpose: 'analytics' | 'marketing' | 'functional' | 'all',
 *   analytics: boolean,
 *   marketing: boolean,
 *   functional: boolean,
 *   previousConsent?: { analytics: boolean, marketing: boolean, functional: boolean }
 * }
 */
export async function POST(request: NextRequest) {
  try {
    const payloadConfig = await config
    const payload = await getPayload({ config: payloadConfig })

    const body = await request.json()
    const { action, purpose, analytics, marketing, functional, previousConsent } = body

    // Validate required fields
    if (!action || !['accept', 'reject', 'update'].includes(action)) {
      return NextResponse.json({ error: 'Invalid action' }, { status: 400 })
    }
    if (!purpose || !['analytics', 'marketing', 'functional', 'all'].includes(purpose)) {
      return NextResponse.json({ error: 'Invalid purpose' }, { status: 400 })
    }

    // Get IP and User Agent
    const ip = request.headers.get('x-forwarded-for')?.split(',')[0] 
               || request.headers.get('x-real-ip') 
               || 'unknown'
    const userAgent = request.headers.get('user-agent') || 'unknown'

    // Create consent log
    const consentLog = await payload.create({
      collection: 'consent-logs',
      data: {
        action,
        purpose,
        analytics: analytics ?? false,
        marketing: marketing ?? false,
        functional: functional ?? false,
        userAgent,
        ip,
        timestamp: new Date().toISOString(),
        previousConsent: previousConsent || null,
        newConsent: {
          analytics: analytics ?? false,
          marketing: marketing ?? false,
          functional: functional ?? false,
        },
      },
    })

    return NextResponse.json({ success: true, doc: consentLog })
  } catch (error) {
    console.error('Consent logging error:', error)
    return NextResponse.json({ error: 'Failed to log consent' }, { status: 500 })
  }
}

/**
 * GET /api/consent - Get current consent status (from cookie or localStorage)
 * This endpoint is mainly for verification, actual consent is stored client-side
 */
export async function GET(request: NextRequest) {
  // Consent is stored client-side in localStorage
  // This endpoint is for compliance verification
  return NextResponse.json({ 
    message: 'Consent is stored client-side',
    purposes: ['analytics', 'marketing', 'functional'],
    note: 'Use POST to update consent preferences'
  })
}
