/**
 * GET /api/offers/last-offer?source=lead|partner&recordId=N&language=de
 * Tells the contract modal which package annexes are attachable: the last
 * sent offer (Strapi attachment or saved conditions), AGB/AVV availability
 * and versions, static ADSp/Logistik-AGB.
 */
import refreshTokenHelper from '../../utils/refreshTokenHelper'
import errorHandlingHelper from '../../utils/errorHandlingHelper'
import forceLogoutHelper from '../../utils/forceLogoutHelper'
import { describeLastOffer } from '../../utils/offers/offerAttachments'
import { describePackageAvailability } from '../../utils/offers/contractPackage'

const handleFunc = async (event: any, authToken: string | null = null) => {
  const token = authToken ?? await getTokenHelper(event)
  if (!token) return { status: 401, message: 'Not authenticated' }
  const q = getQuery(event)
  const source = q.source === 'lead' ? 'lead' : 'partner'
  const recordId = Number(q.recordId)
  const language = q.language === 'en' ? 'en' : 'de'
  const offer = recordId > 0 ? await describeLastOffer(event, token, source, recordId) : { available: false }
  return { status: 200, offer, ...describePackageAvailability(language) }
}

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
})
