import { string } from 'alga-js'
import refreshTokenHelper from '../../utils/refreshTokenHelper'
import forceLogoutHelper from '../../utils/forceLogoutHelper'
import errorHandlingHelper from '../../utils/errorHandlingHelper'
import getTokenHelper from '../../utils/getTokenHelper'

// iDempiere already scopes ad_org reads to whatever the bearer token's role
// can access — no AD_Role_ID join needed. Return a trimmed list (id + name)
// so the mobile org pickers can render it directly.
const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)

  const filter = 'IsActive eq true'
  const orderby = 'Name asc'
  const select = 'AD_Org_ID,Name'
  const url = `models/ad_org?$filter=${string.urlEncode(filter)}&$orderby=${string.urlEncode(orderby)}&$select=${select}&$top=500`

  const res: any = await event.context.fetch(url, 'GET', token, null)

  const records: any[] = Array.isArray(res?.records) ? res.records : []
  return records
    .map((r: any) => ({ id: r.id ?? r.AD_Org_ID, name: r.Name || '' }))
    .filter((o: any) => o.id !== undefined && o.id !== null && o.name)
}

export default defineEventHandler(async (event) => {
  // Auth-only retry: business errors no longer trigger a token refresh.
  return await withAuthRetry(event, handleFunc)
})
