// Product history: every M_Transaction of one product, enriched via transactionEnrichHelper
// (shared with transactions-by-org.get.ts).
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"
import { enrichTransactions } from "../../utils/transactionEnrichHelper"

const MAX_ROWS = 10000

const handleFunc = async (event: any, authToken: any = null) => {
  let data: any = { records: [] }
  const token = authToken ?? await getTokenHelper(event)
  const query = getQuery(event)
  const productId = Number(query.productId)

  if (!productId || productId <= 0) {
    return { status: 400, message: 'Product ID is required' }
  }

  const transactionRes: any = await fetchHelper(
    event,
    `models/m_transaction?$filter=${string.urlEncode('M_Product_ID eq ' + productId)}&$orderby=${string.urlEncode('MovementDate desc')}&$top=${MAX_ROWS}`,
    'GET',
    token,
    null
  )

  if (!transactionRes?.records || transactionRes.records.length === 0) {
    return data
  }

  const productRes: any = await fetchHelper(event, `models/M_Product/${productId}`, 'GET', token, null)
  const productInfo = {
    name: productRes?.Name || '',
    sku: productRes?.SKU || '',
    value: productRes?.Value || ''
  }

  data.records = await enrichTransactions(event, token, transactionRes.records, productInfo)
  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)
      forceLogoutHelper(event, data)
    }
  }

  return data
})
