import refreshTokenHelper from '../../utils/refreshTokenHelper'
import getTokenHelper from '../../utils/getTokenHelper'
import fetchHelper from '../../utils/fetchHelper'

/**
 * Session refresh endpoint for PWA resume.
 * Validates the current token against iDempiere and refreshes if expired.
 * Returns { valid: true } if session is active, or refreshes and returns the new state.
 */
const handleFunc = async (event: any, authToken: string | null = null) => {
  const token = authToken ?? await getTokenHelper(event)
  // Make a lightweight call to iDempiere to validate the token
  const res = await fetchHelper(event, 'models/ad_user?$top=1&$select=id', 'GET', token, null)
  return { valid: true }
}

export default defineEventHandler(async (event) => {
  let data: any = {}
  try {
    data = await handleFunc(event)
  } catch (err: any) {
    try {
      // Token expired — refresh it (this sets new cookies via setAuthCookie)
      let authToken = await refreshTokenHelper(event)
      data = { valid: true, refreshed: true }
    } catch (error: any) {
      data = { valid: false }
    }
  }
  return data
})