import { NextRequest, NextResponse } from 'next/server'

/**
 * Proxy for meetings API endpoints
 * Routes requests to the backend service to avoid mixed-content/CORS issues
 */

const BACKEND_URL = process.env.BACKEND_URL || 'http://localhost:8000'

async function proxyRequest(
  request: NextRequest,
  params: { path: string[] }
): Promise<NextResponse> {
  const path = params.path.join('/')
  const url = `${BACKEND_URL}/api/meetings/${path}`

  try {
    const headers: HeadersInit = {
      'Content-Type': 'application/json',
    }

    // Forward authorization header if present
    const authHeader = request.headers.get('authorization')
    if (authHeader) {
      headers['Authorization'] = authHeader
    }

    const fetchOptions: RequestInit = {
      method: request.method,
      headers,
    }

    // Add body for POST/PUT/PATCH requests
    if (['POST', 'PUT', 'PATCH'].includes(request.method)) {
      fetchOptions.body = await request.text()
    }

    const response = await fetch(url, fetchOptions)

    // Get response data
    const contentType = response.headers.get('content-type')
    let data: string | ArrayBuffer

    if (contentType?.includes('application/json')) {
      data = await response.text()
    } else {
      data = await response.arrayBuffer()
    }

    // Return proxied response
    return new NextResponse(data, {
      status: response.status,
      headers: {
        'Content-Type': contentType || 'application/json',
      },
    })
  } catch (error) {
    console.error(`Failed to proxy ${request.method} ${url}:`, error)
    return NextResponse.json(
      { error: 'Backend nicht erreichbar', details: error instanceof Error ? error.message : 'Unknown error' },
      { status: 502 }
    )
  }
}

export async function GET(
  request: NextRequest,
  context: { params: Promise<{ path: string[] }> }
) {
  const params = await context.params
  return proxyRequest(request, params)
}

export async function POST(
  request: NextRequest,
  context: { params: Promise<{ path: string[] }> }
) {
  const params = await context.params
  return proxyRequest(request, params)
}

export async function PUT(
  request: NextRequest,
  context: { params: Promise<{ path: string[] }> }
) {
  const params = await context.params
  return proxyRequest(request, params)
}

export async function DELETE(
  request: NextRequest,
  context: { params: Promise<{ path: string[] }> }
) {
  const params = await context.params
  return proxyRequest(request, params)
}
