import { defineEventHandler, proxyRequest } from 'h3'

export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig(event)
  const targetBase = config.public.verificationApiBaseUrl || 'http://10.10.123.140:8089/api/v1'
  
  // Extract path suffix after /klinik-api
  const suffix = event.path.replace(/^\/klinik-api/, '')
  const targetUrl = `${targetBase}${suffix}`
  
  // Clone request headers and overwrite Host/Origin/Referer with backend-whitelisted values
  const headers = { ...event.node.req.headers } as Record<string, string>
  
  // Extract backend target host
  try {
    const urlObj = new URL(targetBase)
    headers.host = urlObj.host
  } catch (e) {
    headers.host = config.proxyTargetHostKlinikFallback || '10.10.123.140:8089'
  }
  
  // Spoof the origin and referer to match the server's trusted/whitelisted client origin
  const proxyOrigin = config.proxyClientOrigin as string
  headers.origin = proxyOrigin
  headers.referer = proxyOrigin.endsWith('/') ? proxyOrigin : `${proxyOrigin}/`
  
  console.log(`[Proxy Klinik-API] Forwarding ${event.node.req.method} to: ${targetUrl}`)
  console.log(`[Proxy Klinik-API] Headers - Host: ${headers.host}, Origin: ${headers.origin}`)
  
  try {
    return await proxyRequest(event, targetUrl, {
      headers
    })
  } catch (error: any) {
    console.error(`[Proxy Klinik-API] Error forwarding to ${targetUrl}:`, error)
    throw error
  }
})
