import { string } from 'alga-js'
import refreshTokenHelper from "../../../utils/refreshTokenHelper"
import forceLogoutHelper from "../../../utils/forceLogoutHelper"
import errorHandlingHelper from "../../../utils/errorHandlingHelper"
import fetchHelper from "../../../utils/fetchHelper"

// Agreement notes for a business partner.
// Stored one row per agreement in iDempiere table CUST_Agreement_CBartner,
// ordered newest-first by DateFrom.
const handleFunc = async (event: any, authToken: any = null) => {
  let data: any = {}
  const token = authToken ?? await getTokenHelper(event)
  const query = getQuery(event)
  const bpartnerId = query.bpartnerId

  // Without a partner we have nothing to scope to — return an empty list.
  if(!bpartnerId) {
    return { records: [], 'row-count': 0 }
  }

  const filter = string.urlEncode('C_BPartner_ID eq ' + bpartnerId + ' AND IsActive eq true')
  const orderby = string.urlEncode('DateFrom desc')
  const res: any = await fetchHelper(event, `models/cust_agreement_cbartner?$filter=${filter}&$orderby=${orderby}`, 'GET', token, null)
  if(res) {
    data = res
  }

  return data
}

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)
      if([401, 402, 403, 407].includes(Number(data.status))) {
        //@ts-ignore
        setCookie(event, 'user', null)
      }
    }
  }

  return data
})
