// Initialize HelcimPay.js session
import { requireAuth } from '../../utils/auth.js'
import { initializeHelcimPaySession } from '../../utils/helcim.js'

export default defineEventHandler(async (event) => {
  try {
    const body = await validateBody(event, helcimInitializePaymentSchema)

    // Event ticket purchases can be made without authentication
    const isEventTicket = body.metadata?.type === 'event_ticket'
    if (!isEventTicket) {
      await requireAuth(event)
    }

    const amount = body.amount || 0

    // For event tickets with amount > 0, we do a purchase
    // For subscriptions or card verification, we do verify
    const paymentType = isEventTicket && amount > 0 ? 'purchase' : 'verify'

    const requestBody = {
      paymentType,
      amount: paymentType === 'purchase' ? amount : 0,
      currency: 'CAD',
      paymentMethod: 'cc'
    }

    // For subscription setup (verify mode), include customer code if provided
    // For one-time purchases (event tickets), don't include customer code
    // as the customer may not exist in Helcim yet
    if (body.customerCode && paymentType === 'verify') {
      requestBody.customerCode = body.customerCode
    }

    // Add product/event information for better display in Helcim modal
    if (body.metadata?.eventTitle) {
      // Some Helcim accounts don't support invoice numbers in initialization
      // Try multiple fields that might display in the modal
      requestBody.description = body.metadata.eventTitle
      requestBody.notes = body.metadata.eventTitle
      requestBody.orderNumber = `${body.metadata.eventId}`
    }

    const paymentData = await initializeHelcimPaySession(requestBody)

    return {
      success: true,
      checkoutToken: paymentData.checkoutToken,
      secretToken: paymentData.secretToken
    }
  } catch (error) {
    if (error.statusCode) throw error
    console.error('Error initializing HelcimPay:', error)
    throw createError({
      statusCode: 500,
      statusMessage: 'An unexpected error occurred'
    })
  }
})
