import getTokenHelper from "../../utils/getTokenHelper"
import refreshTokenHelper from "../../utils/refreshTokenHelper"
import errorHandlingHelper from "../../utils/errorHandlingHelper"
import { resolveMerchantPartner, pickMerchantFields } from "../../utils/merchantPartner"

/**
 * Merchant self-service read of the own company partner (C_BPartner).
 * Uses the iDempiere service token internally (limited roles cannot read
 * c_bpartner) but returns ONLY the whitelisted fields from
 * MERCHANT_PARTNER_FIELDS plus the company name — never the raw record.
 */
const handleFunc = async (event: any, authToken: string | null = null) => {
  const config = useRuntimeConfig()
  const serviceToken = (config.api as any)?.idempieretoken
  const token = serviceToken || authToken || await getTokenHelper(event)

  const partner = await resolveMerchantPartner(event, token)
  if (!partner) {
    return { status: 404, message: 'No business partner is linked to this account' }
  }

  return {
    status: 200,
    companyName: partner.record?.Name || '',
    ...pickMerchantFields(partner.record)
  }
}

export default defineEventHandler(async (event) => {
  let data: any = {}

  try {
    data = await handleFunc(event)
  } catch (err: any) {
    try {
      const authToken: any = await refreshTokenHelper(event)
      data = await handleFunc(event, authToken)
    } catch (error: any) {
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
    }
  }

  return data
})
