/**
 * GET /api/offers/conditions?source=lead|partner&recordId=N
 * Returns the record's saved offer/contract conditions JSON (see
 * server/utils/offers/offerConditions.ts). Fail-soft: a missing
 * offer_conditions column or empty value yields { conditions: {} }.
 */
import refreshTokenHelper from '../../../utils/refreshTokenHelper'
import errorHandlingHelper from '../../../utils/errorHandlingHelper'
import forceLogoutHelper from '../../../utils/forceLogoutHelper'
import { readOfferConditions } from '../../../utils/offers/offerConditions'

const handleFunc = async (event: any, authToken: string | null = null) => {
  const token = authToken ?? await getTokenHelper(event)
  if (!token) return { status: 401, message: 'Not authenticated' }

  const query = getQuery(event)
  const source = query.source === 'lead' ? 'lead' : 'partner'
  const recordId = Number(query.recordId)
  if (!(recordId > 0)) return { status: 400, message: 'recordId required' }

  const conditions = await readOfferConditions(event, token, source, recordId)
  return { status: 200, conditions }
}

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