import refreshTokenHelper from "../../../../utils/refreshTokenHelper"
import forceLogoutHelper from "../../../../utils/forceLogoutHelper"
import errorHandlingHelper from "../../../../utils/errorHandlingHelper"
import { runProductsGrid } from '../../../../utils/productsGrid'

// Products list (AG Grid server-side rows). The query/mapping body lives in
// server/utils/productsGrid.ts and is shared with ag-grid/products-v2.
const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const body = await readBody(event)
  return runProductsGrid(event, token, body)
}

export default defineEventHandler(async (event) => {
  let data: any = {}

  try {
    console.log('[Products AG Grid] handleFunc attempt 1')
    data = await handleFunc(event)
    console.log('[Products AG Grid] Success - rows:', data?.rows?.length, 'lastRow:', data?.lastRow)
  } catch (err: any) {
    console.log('[Products AG Grid] First attempt failed:', err?.statusCode || err?.message || err)
    try {
      let authToken: any = await refreshTokenHelper(event)
      console.log('[Products AG Grid] Got refresh token, retrying handleFunc')
      data = await handleFunc(event, authToken)
      console.log('[Products AG Grid] Retry success - rows:', data?.rows?.length, 'lastRow:', data?.lastRow)
    } catch (error: any) {
      console.log('[Products AG Grid] Retry also failed:', error?.statusCode || error?.message || error)
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
      forceLogoutHelper(event, data)
    }
  }

  return data
})
