import refreshTokenHelper from "../../../utils/refreshTokenHelper"
import forceLogoutHelper from "../../../utils/forceLogoutHelper"
import errorHandlingHelper from "../../../utils/errorHandlingHelper"
import { runMarketplaceOrdersSync } from "../../../utils/marketplaceOrderSync"

// Reconciliation WRITE endpoint for the Amazon Bestellabgleich page. Thin wrapper
// over the shared marketplace sync core (server/utils/marketplaceOrderSync.ts) — the
// reactivate→add-adjustment-line→complete logic is identical for Amazon and eBay.
// Amazon orders are linked via amazon_order_id (with ExternalOrderId as fallback).

const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const body = await readBody(event)
  const adjustmentChargeId = Number(useRuntimeConfig(event)?.api?.amazonAdjustmentChargeId) || 0

  return await runMarketplaceOrdersSync(event, token, {
    items: body?.items,
    syncAmount: body?.syncAmount === true,
    syncDate: body?.syncDate === true,
    adjustmentChargeId,
    linkIdFields: ['amazon_order_id', 'ExternalOrderId']
  })
}

export default defineEventHandler(async (event) => {
  let data: any = {}
  try {
    data = await handleFunc(event)
  } catch (err: any) {
    try {
      let authToken: any = await refreshTokenHelper(event)
      data = await handleFunc(event, authToken)
    } catch (error: any) {
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
      forceLogoutHelper(event, data)
    }
  }
  return data
})
