/**
 * Shared try/refresh/catch wrapper for the carrier-rate routes (same contract as
 * every other settings route: handleFunc(event, token) → data; 401 → refresh → retry).
 */
import refreshTokenHelper from '../refreshTokenHelper'
import forceLogoutHelper from '../forceLogoutHelper'
import errorHandlingHelper from '../errorHandlingHelper'

export const withIdempiere = (handleFunc: (event: any, token: string) => Promise<any>) => async (event: any) => {
  let data: any = {}
  try {
    const token = await getTokenHelper(event)
    data = await handleFunc(event, token)
  } catch (err: any) {
    try {
      const 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
}
