/**
 * GET /api/settings/software-catalog/lists
 * The five AD_Reference lists the catalog tables use (dropdown contents of the
 * settings page) → { supportLevel, itemType, featureGroup, featureMode, priceUnit:
 * [{ id, name }] , missing: [referenceName] }. Read through getLeadRefList (10-min cache).
 */
import refreshTokenHelper from '../../../utils/refreshTokenHelper'
import errorHandlingHelper from '../../../utils/errorHandlingHelper'
import forceLogoutHelper from '../../../utils/forceLogoutHelper'
import { getLeadRefList } from '../../../utils/leads/leadQualification'

const REFS: Record<string, string> = {
  supportLevel: 'CUST_SoftwareSupportLevel',
  itemType: 'CUST_SoftwareItemType',
  featureGroup: 'CUST_SoftwareFeatureGroup',
  featureMode: 'CUST_SoftwareFeatureMode',
  priceUnit: 'CUST_SoftwarePriceUnit'
}

const handleFunc = async (event: any, authToken: string | null = null) => {
  const token = authToken ?? await getTokenHelper(event)
  if (!token) return { status: 401, message: 'Not authenticated' }
  const out: any = { status: 200, missing: [] as string[] }
  for (const [key, refName] of Object.entries(REFS)) {
    try {
      out[key] = await getLeadRefList(event, token, refName)
    } catch (err: any) {
      const s = Number(err?.statusCode ?? err?.status ?? err?.response?.status)
      if (s === 401) throw err
      out[key] = []
      out.missing.push(refName)
    }
  }
  return out
}

export default defineEventHandler(async (event) => {
  let data: any = {}
  try {
    data = await handleFunc(event)
  } 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
})
