import refreshTokenHelper from "../../../utils/refreshTokenHelper"
import getTokenHelper from "../../../utils/getTokenHelper"
import forceLogoutHelper from "../../../utils/forceLogoutHelper"
import errorHandlingHelper from "../../../utils/errorHandlingHelper"
import { parseIdList } from "../../../utils/bankReconciliation"
import { computeLineSuggestions } from "../../../utils/bankReconciliationSuggestions"

// GET /api/accounting/bank-reconciliation/suggestions?ids=1,2,3
// Match suggestions for the unmatched lines of MANY statements in one call
// (the "Alle Auszüge" view of the reconcile tab). Same engine as
// {id}/suggestions — open invoices + allocations are fetched only once.
const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const ids = parseIdList(getQuery(event).ids)
  if (!ids.length) {
    return { status: 200, suggestions: {} }
  }
  return { status: 200, suggestions: await computeLineSuggestions(event, token, ids) }
}

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) {
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
      forceLogoutHelper(event, data)
    }
  }

  return data
})
