import { date } from 'alga-js'
import refreshTokenHelper from "../../../../utils/refreshTokenHelper"
import getTokenHelper from "../../../../utils/getTokenHelper"
import forceLogoutHelper from "../../../../utils/forceLogoutHelper"
import errorHandlingHelper from "../../../../utils/errorHandlingHelper"
import fetchHelper from "../../../../utils/fetchHelper"
import dhlHelper from "../../../../utils/dhlHelper"
import dhlCustomHelper from "../../../../utils/dhlCustomHelper"
import { commissionTableFkPatch } from "../../../../utils/commissionTable"

const handleInoutFunc = async (event: any, authToken: any = null, option: any) => {
  let data: any = {}
  const token = authToken ?? await getTokenHelper(event)
  const trackingPayload: any = {
    TrackingNo: option.tracking_number,
    DHL_Shipment_Code: null,
    DHL_Routing_Code: 'other',
    DHL_Label_Base64: null,
    IsCommissioned: true,
    shipping_date: date.now('', '', {timeZone: 'UTC'}).replace(' ', 'T')+'Z',
    shipping_service_name: option.shippingService,
    tableName: 'M_Inout'
  }
  if(option.paket_type) {
    trackingPayload['M_Paket_Type_ID'] = option.paket_type
  }
  // Link the commissioning table (Tisch) so the correct camera's video can be
  // resolved later. No-op when the printer is unknown/unmapped.
  Object.assign(trackingPayload, await commissionTableFkPatch(event, option.shippingPrinter, token))

  const resp: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, trackingPayload)
  if(resp) {
    data['shipment'] = resp
    data['status'] = 200
    data['message'] = ''

    if(resp?.IsCommissionedConfirmed !== true) {
      const resp2: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id+'?$expand=c_order_id,m_inoutline,c_bpartner_location_id', 'GET', token, null)

      if(resp2?.C_Order_ID?.C_OrderSource_ID?.id) {
        const resp3: any = await fetchHelper(event, 'models/c_ordersource/'+resp2.C_Order_ID.C_OrderSource_ID.id, 'GET', token, null)

        // Debug: Log full order source object to see all properties
        console.log('[DEBUG] Full Order Source Object (resp3):', JSON.stringify(resp3, null, 2))

        // Debug: Log order source information
        console.log('[DEBUG] Order Source Info:', {
          orderSourceId: resp2.C_Order_ID.C_OrderSource_ID.id,
          orderSourceValue: resp3?.value,
          marketplaceIdentifier: resp3?.Marketplace?.identifier,
          marketplaceUrl: resp3?.marketplace_url,
          hasShopware6: !!resp2?.C_Order_ID?.shopware6_order_id,
          hasShopify: !!resp2?.C_Order_ID?.shopify_order_id,
          hasAmazon: !!resp2?.C_Order_ID?.amazon_order_id,
          hasPlentyone: !!resp2?.C_Order_ID?.plentyone_order_id,
          hasJTLFFN: !!(resp2?.C_Order_ID?.ExternalOrderId && resp3?.Marketplace?.identifier === 'jtl-ffn'),
          externalOrderId: resp2?.C_Order_ID?.ExternalOrderId
        })

        // Add order source debug info to data
        data['orderSourceDebug'] = {
          orderSourceId: resp2.C_Order_ID.C_OrderSource_ID.id,
          orderSourceValue: resp3?.value,
          marketplaceIdentifier: resp3?.Marketplace?.identifier,
          marketplaceUrl: resp3?.marketplace_url,
          fullOrderSource: resp3,
          orderData: {
            externalOrderId: resp2?.C_Order_ID?.ExternalOrderId,
            shopware6_order_id: resp2?.C_Order_ID?.shopware6_order_id,
            shopify_order_id: resp2?.C_Order_ID?.shopify_order_id,
            amazon_order_id: resp2?.C_Order_ID?.amazon_order_id,
            plentyone_order_id: resp2?.C_Order_ID?.plentyone_order_id
          },
          detectedPlatform: resp2?.C_Order_ID?.shopware6_order_id ? 'shopware6' :
                           resp2?.C_Order_ID?.shopify_order_id ? 'shopify' :
                           resp2?.C_Order_ID?.amazon_order_id ? 'amazon' :
                           resp2?.C_Order_ID?.plentyone_order_id ? 'plentyone' :
                           (resp2?.C_Order_ID?.ExternalOrderId && resp3?.Marketplace?.identifier === 'jtl-ffn') ? 'jtl-ffn' :
                           (resp2?.C_Order_ID?.ebay_order_id) ? 'ebay' : 'unknown'
        }

        if(resp2?.C_Order_ID?.shopware6_order_id) {
          if(resp3?.marketplace_url) {
            try {
              const resp4: any = await laravelHelper(event, 'sales/orders/mark-shopware-order-delivery', 'POST', {
                marketplace_url: resp3.marketplace_url,
                marketplace_key: resp3.marketplace_key,
                marketplace_secret: resp3.marketplace_secret,
                id: resp2.C_Order_ID.shopware6_order_id,
                trackingCodes: [option.tracking_number],
                mail: {
                  email: 'notification@logyou.de',
                  isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                  orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                  name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                  company: 'LogYou GmbH',
                  carrier: option.shippingService ?? 'DHL',
                  lines: resp2?.m_inoutline?.filter((i: any) => i.M_Product_ID && !i.C_Charge_ID).map((i: any) => ({
                    description: i.M_Product_ID.identifier,
                    quantity: i.QtyEntered
                  })) ?? [],
                  address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                  address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                  city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                  country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                  postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
                }
              })

              if(resp4) {
                const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  IsCommissionedConfirmed: true,
                  ack_commissioned_laravel: true,
                  tableName: 'M_Inout'
                })
              }
            } catch(err: any) {
              data['shopware'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
            }
          }
        }
        if(resp2?.C_Order_ID?.shopify_order_id) {
          if(resp3?.marketplace_url) {
            try {
              const resp4: any = await laravelHelper(event, 'sales/orders/mark-shopify-order-delivery', 'POST', {
                orderSource: resp3,
                id: resp2.C_Order_ID.shopify_order_id,
                trackingCodes: {
                  number: option.tracking_number,
                  url: option.tracking_url,
                  company: 'DHL Express'
                },
                mail: {
                  email: 'notification@logyou.de',
                  isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                  orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                  name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                  company: 'LogYou GmbH',
                  carrier: option.shippingService ?? 'DHL',
                  lines: resp2?.m_inoutline?.filter((i: any) => i.M_Product_ID && !i.C_Charge_ID).map((i: any) => ({
                    description: i.M_Product_ID.identifier,
                    quantity: i.QtyEntered
                  })) ?? [],
                  address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                  address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                  city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                  country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                  postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
                }
              })

              if(resp4) {
                const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  IsCommissionedConfirmed: true,
                  ack_commissioned_laravel: true,
                  tableName: 'M_Inout'
                })
              }
            } catch(err: any) {
              data['shopify'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
            }
          }
        }
        if(resp2?.C_Order_ID?.amazon_order_id) {
          if(resp3?.marketplace_url) {
            data['amazon'] = resp3
            try {
              const resp4: any = await laravelHelper(event, 'sales/orders/mark-amazon-order-delivery', 'POST', {
                orderSource: resp3,
                id: resp2.C_Order_ID.amazon_order_id,
                details: {
                  shippingDate: trackingPayload.shipping_date,
                  carrierCode: resp2?.C_Order_ID?.M_Shipper_ID?.identifier || 'Other',
                  shippingMethod: 'Paket',
                  referenceId: resp2?.DocumentNo ?? option.inout_id
                },
                trackingCodes: {
                  number: option.tracking_number,
                  url: option.tracking_url,
                  // company: 'DHL Home Delivery', // 'DHL', 'DHL eCommerce', 'DHL Express', 'DHL Freight', 'DHL Global Mail', 'DHL Home Delivery', 'DHL Kargo', 'DHL-Paket', 'DHL Parcel UK', 'DHLPL',
                },
                mail: {
                  email: 'notification@logyou.de',
                  isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                  orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                  name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                  company: 'LogYou GmbH',
                  carrier: option.shippingService ?? 'DHL',
                  lines: resp2?.m_inoutline?.filter((i: any) => i.M_Product_ID && !i.C_Charge_ID).map((i: any) => ({
                    description: i.M_Product_ID.identifier,
                    quantity: i.QtyEntered
                  })) ?? [],
                  address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                  address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                  city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                  country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                  postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
                }
              })

              if(resp4) {
                const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  IsCommissionedConfirmed: true,
                  ack_commissioned_laravel: true,
                  tableName: 'M_Inout'
                })
              }
            } catch(err: any) {
              data['amazon'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
            }
          }
        }
        if(resp2?.C_Order_ID?.plentyone_order_id) {
          if(resp3?.marketplace_url) {
            try {
              data['plentyone'] = resp3
              const plentyOneWeight = resp2?.m_inoutline?.reduce((acc: any, prev: any) => Number(acc['Weight'] ?? 0) + Number(prev['Weight'] ?? 0), 0)

              // Parse tracking numbers - support multiple comma-separated values
              const trackingNumbersRaw = option.tracking_number || ''
              const trackingNumbersArray = trackingNumbersRaw.split(',').map((t: string) => t.trim()).filter((t: string) => t.length > 0)

              // Build trackingCodes - send as array if multiple, otherwise single object for backwards compatibility
              let trackingCodesPayload: any
              if (trackingNumbersArray.length > 1) {
                // Multiple tracking numbers - send as array
                trackingCodesPayload = trackingNumbersArray.map((num: string) => ({
                  number: num,
                  url: option.tracking_url || '',
                }))
              } else {
                // Single tracking number - send as object for backwards compatibility
                trackingCodesPayload = {
                  number: trackingNumbersArray[0] || option.tracking_number,
                  url: option.tracking_url,
                }
              }

              const resp4: any = await laravelHelper(event, 'sales/orders/mark-plentyone-order-delivery', 'POST', {
                orderSource: resp3,
                id: resp2.C_Order_ID.plentyone_order_id,
                details: {
                  shippingDate: trackingPayload.shipping_date,
                  carrierCode: resp2?.C_Order_ID?.M_Shipper_ID?.identifier || 'Other',
                  shippingMethod: 'Paket',
                  referenceId: resp2?.DocumentNo ?? option.inout_id,
                  weight: plentyOneWeight ?? 0
                },
                trackingCodes: trackingCodesPayload,
                mail: {
                  email: 'notification@logyou.de',
                  isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                  orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                  name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                  company: 'LogYou GmbH',
                  carrier: option.shippingService ?? 'DHL',
                  lines: resp2?.m_inoutline?.filter((i: any) => i.M_Product_ID && !i.C_Charge_ID).map((i: any) => ({
                    description: i.M_Product_ID.identifier,
                    quantity: i.QtyEntered
                  })) ?? [],
                  address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                  address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                  city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                  country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                  postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
                }
              })
              data['plentyone_laravel'] = resp4
              data['tracking_numbers'] = trackingNumbersArray // Return tracking numbers for frontend display
              const plentyConfirmLog = JSON.stringify({
                marketplace: 'plentyone',
                endpoint: 'sales/orders/mark-plentyone-order-delivery',
                at: new Date().toISOString(),
                ok: !!resp4,
                resp: resp4
              }).slice(0, 8000)
              if(resp4) {
                const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  IsCommissionedConfirmed: true,
                  ack_commissioned_laravel: true,
                  marketplace_confirm_log: plentyConfirmLog,
                  tableName: 'M_Inout'
                })
              } else {
                try {
                  await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                    marketplace_confirm_log: plentyConfirmLog,
                    tableName: 'M_Inout'
                  })
                } catch (_logErr) {}
              }
            } catch(err: any) {
              data['plentyone'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
              try {
                await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  marketplace_confirm_log: JSON.stringify({
                    marketplace: 'plentyone',
                    endpoint: 'sales/orders/mark-plentyone-order-delivery',
                    at: new Date().toISOString(),
                    ok: false,
                    error: err?.data ?? err?.message ?? String(err)
                  }).slice(0, 8000),
                  tableName: 'M_Inout'
                })
              } catch (_logErr) {}
            }
          }
        }
        if(resp2?.C_Order_ID?.ExternalOrderId && resp3?.Marketplace?.identifier === 'jtl-ffn') {
          console.log('[DEBUG] JTL-FFN Order Detected:', {
            externalOrderId: resp2.C_Order_ID.ExternalOrderId,
            orderSourceValue: resp3?.value,
            marketplaceIdentifier: resp3?.Marketplace?.identifier,
            marketplaceUrl: resp3?.marketplace_url,
            endpoint: 'sales/orders/mark-jtl-order-delivery',
            hasMarketplaceUrl: !!resp3?.marketplace_url
          })

          if(resp3?.marketplace_url) {
            console.log('[DEBUG] JTL-FFN: Sending order confirmation to Laravel endpoint:', {
              endpoint: 'sales/orders/mark-jtl-order-delivery',
              marketplaceUrl: resp3.marketplace_url,
              orderId: resp2.C_Order_ID.ExternalOrderId,
              trackingNumber: option.tracking_number
            })

            console.log('[DEBUG] JTL-FFN: Building payload...')
            console.log('[DEBUG] JTL-FFN: resp3 keys:', Object.keys(resp3 || {}))
            console.log('[DEBUG] JTL-FFN: resp3.IsCustomTrackingMail:', resp3?.IsCustomTrackingMail)
            console.log('[DEBUG] JTL-FFN: resp3.isSentCustomTrackingMail:', resp3?.isSentCustomTrackingMail)

            try {
              const jtlPayload = {
                orderSource: resp3,
                id: resp2.C_Order_ID.ExternalOrderId,
                details: {
                  shippingDate: trackingPayload.shipping_date,
                  carrierCode: resp2?.C_Order_ID?.M_Shipper_ID?.identifier || 'Other',
                  shippingMethod: 'Paket',
                  referenceId: resp2?.DocumentNo ?? option.inout_id,
                  weight: 0
                },
                trackingCodes: {
                  number: option.tracking_number,
                  url: option.tracking_url,
                },
                mail: {
                  email: 'notification@logyou.de',
                  isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                  IsCustomTrackingMail: resp3?.IsCustomTrackingMail ?? false,
                  orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                  name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                  company: 'LogYou GmbH',
                  carrier: option.shippingService ?? 'DHL',
                  lines: resp2?.m_inoutline?.filter((i: any) => i.M_Product_ID && !i.C_Charge_ID).map((i: any) => ({
                    description: i.M_Product_ID.identifier,
                    quantity: i.QtyEntered
                  })) ?? [],
                  address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                  address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                  city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                  country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                  postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
                }
              }

              console.log('[DEBUG] JTL-FFN: Payload being sent to Laravel:', JSON.stringify(jtlPayload, null, 2))

              console.log('[DEBUG] JTL-FFN: About to call laravelHelper...')
              const resp4: any = await laravelHelper(event, 'sales/orders/mark-jtl-order-delivery', 'POST', jtlPayload)
              console.log('[DEBUG] JTL-FFN: laravelHelper call completed')

              console.log('[DEBUG] JTL-FFN: Laravel response:', {
                success: !!resp4,
                response: resp4
              })

              data['jtl_laravel'] = resp4

              if(resp4) {
                console.log('[DEBUG] JTL-FFN: Marking order as commissioned confirmed')
                const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                  IsCommissionedConfirmed: true,
                  ack_commissioned_laravel: true,
                  tableName: 'M_Inout'
                })
              }
            } catch(err: any) {
              console.error('[DEBUG] JTL-FFN: Error during order confirmation:', err)
              data['jtl'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
            }
          } else {
            console.warn('[DEBUG] JTL-FFN: No marketplace_url configured for order source')
            data['jtl_warning'] = 'No marketplace_url configured for JTL-FFN order source'
          }
        }
        if(resp2?.C_Order_ID?.ebay_order_id) {
          try {
            const resp4: any = await laravelHelper(event, 'sales/orders/mark-ebay-order-delivery', 'POST', {
              orderSource: resp3,
              id: resp2.C_Order_ID.ebay_order_id,
              details: {
                shippingDate: trackingPayload.shipping_date,
                carrierCode: resp2?.C_Order_ID?.M_Shipper_ID?.identifier || 'Other',
                shippingMethod: 'Paket',
                referenceId: resp2?.DocumentNo ?? option.inout_id
              },
              trackingCodes: {
                number: option.tracking_number,
                url: option.tracking_url,
              },
              mail: {
                email: 'notification@logyou.de',
                isSentCustomTrackingMail: resp3?.isSentCustomTrackingMail ?? false,
                orderNumber: resp2?.C_Order_ID?.DocumentNo ?? 0,
                name: resp2?.C_Order_ID?.C_BPartner?.identifier ?? 'Mr/Ms',
                company: 'LogYou GmbH',
                carrier: option.shippingService ?? 'DHL',
                lines: resp2?.m_inoutline?.map((i: any) => ({
                  description: i.M_Product_ID.identifier,
                  quantity: i.QtyEntered
                })) ?? [],
                address1: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address1 ?? '',
                address2: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Address2 ?? '',
                city: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.City ?? '',
                country: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.C_Country_ID?.identifier ?? '',
                postal: resp2?.C_Order_ID?.C_BPartner_Location_ID?.C_Location_ID?.Postal ?? ''
              }
            })

            if(resp4) {
              const resp5: any = await fetchHelper(event, 'models/m_inout/'+option.inout_id, 'PUT', token, {
                IsCommissionedConfirmed: true,
                ack_commissioned_laravel: true,
                tableName: 'M_Inout'
              })
            }
          } catch(err: any) {
            data['ebay'] = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
          }
        }

      }
    }
  }

  return data
}

const handleFunc = async (event: any) => {
  let data: any = {}
  const config = useRuntimeConfig()
  const body = await readBody(event)

  let refNo = body.orderNumber ?? body.inOutUId.replaceAll('-', '')
  let refNoDigit = ''
  if(refNo.length < 9) {
    refNoDigit = '0'
    for(let i = 0; i < (9 - Number(refNo.length)); i++) {
      refNoDigit += '0'
      refNo = `${refNoDigit}${refNo}`
    }
  }

  try {
    const res2 = await handleInoutFunc(event, null, {
      inout_id: body.inOutId,
      tracking_number: body.trackingNo ?? refNo,
      tracking_url: '',
      shipment_code: body.trackingNo ?? refNo,
      routing_code: '',
      label_base64: '',
      paket_type: body.paketType,
      shippingService: body.shippingService,
      shippingPrinter: body.shippingPrinter
    })
    data = {...data, ...res2}
  } catch(err: any) {
    try {
      let authToken: any = await refreshTokenHelper(event)
      const res3 = await handleInoutFunc(event, authToken, {
        inout_id: body.inOutId,
        tracking_number: body.trackingNo ?? refNo,
        tracking_url: '',
        shipment_code: body.trackingNo ?? refNo,
        routing_code: '',
        label_base64: '',
        paket_type: body.paketType,
        shippingService: body.shippingService,
        shippingPrinter: body.shippingPrinter
      })
      data = {...data, ...res3}
    } catch(error: any) {
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
      //forceLogoutHelper(event, data)
    }
  }

  return data
}

export default defineEventHandler(async (event) => {
  let data: any = {}

  try {
    data = await handleFunc(event)
  } catch(err: any) {
    data = errorHandlingHelper(err?.data ?? err, err?.data ?? err)
  }

  return data
})