import getTokenHelper from "../../../utils/getTokenHelper"
import fetchHelper from "../../../utils/fetchHelper"
import sendcloudHelper from "../../../utils/sendcloudHelper"
import dhlTrackingHelper from "../../../utils/dhlTrackingHelper"

const loadCustomDhlCredentials = async (event: any, inoutId: string) => {
  const config = useRuntimeConfig()
  const token = (await getTokenHelper(event)) || config.api.idempieretoken
  if (!token) return null

  try {
    const inout: any = await fetchHelper(event, `models/m_inout/${inoutId}?$expand=c_order_id,ad_org_id`, 'GET', token, null)
    const orderSourceId = inout?.C_Order_ID?.C_OrderSource_ID?.id
    if (!orderSourceId) return null

    const os: any = await fetchHelper(event, `models/c_ordersource/${orderSourceId}`, 'GET', token, null)
    if (os?.DHL_USE_CUSTOM === true && os?.DHLURL) {
      return {
        api: {
          dhlurl: os.DHLURL,
          dhlkey: os.DHLKEY,
          dhlsecret: os.DHLSECRET,
          dhluser: os.DHLUSER,
          dhlpass: os.DHLPASS,
          iscustom: true,
          dhl_billing_number_de: os.dhl_billing_number_de || '63291441520101',
          dhl_billing_number_int: os.dhl_billing_number_int || '63291441525301'
        }
      }
    }
  } catch (_e) {
    // fall through to default credentials
  }
  return null
}

export default defineEventHandler(async (event: any) => {
  const query = getQuery(event)
  const trackingNo = String(query?.no ?? '').trim()
  const service = String(query?.service ?? 'dhl').toLowerCase()
  const inoutId = query?.inout_id ? String(query.inout_id) : ''

  let data: any = {}
  let tracking_service = ''
  let tracking_inout = ''

  if (!trackingNo) {
    return { tracking_service: '', tracking_inout: '' }
  }

  try {
    if (service === 'sendcloud') {
      const res: any = await sendcloudHelper(`tracking/${encodeURIComponent(trackingNo)}`, 'GET', null)
      if (res) {
        data = { ...res }
        data.tracking_content = (res?.statuses ?? []).map((item: any) => ({
          timestamp: item.carrier_update_timestamp,
          title: item.carrier_message,
          description: `${item.carrier_message}, ${item.carrier_code} ${item.parcel_status_history_id}`,
          status: item.parent_status
        }))
      }
      tracking_service = 'sendcloud'
    } else {
      // Default to DHL — unified tracking API handles both DE parcels and international
      const customDhl = inoutId ? await loadCustomDhlCredentials(event, inoutId) : null
      const config = customDhl ?? useRuntimeConfig()
      const apiKey = config?.api?.dhlkey || 'kOMZlCkdY27OvpGKiUffZ8lUigNhcvWn'

      const credential: any = {
        ...(customDhl ?? {}),
        headers: { 'DHL-API-Key': apiKey }
      }

      const url = `track/shipments?trackingNumber=${encodeURIComponent(trackingNo)}`
      const res: any = await dhlTrackingHelper(event, credential, url, 'GET', null)

      if (res) {
        data = { ...res }
        data.tracking_content = (res?.shipments?.[0]?.events ?? []).map((item: any) => {
          const locality = item?.location?.address?.addressLocality ?? ''
          const countryCode = item?.location?.address?.countryCode ?? ''
          const postalCode = item?.location?.address?.postalCode ?? ''
          return {
            timestamp: item.timestamp,
            title: item.status,
            description: item?.description ?? item?.remark ?? `${locality}, ${countryCode} ${postalCode}`.trim(),
            locality,
            postalCode,
            countryCode,
            status: item.statusCode
          }
        })
      }
      tracking_service = 'dhl'
      tracking_inout = inoutId
    }
  } catch (error: any) {
    data.error = error?.data ?? error?.message ?? 'Tracking lookup failed'
    tracking_service = 'error'
  }

  data.tracking_service = tracking_service
  data.tracking_inout = tracking_inout
  return data
})
