import getTokenHelper from "./getTokenHelper"

export const FBA_PARTNER_ID = 1043801

export const resolveFbaPartner = async (event: any) => {
  const config = useRuntimeConfig()
  const serviceToken = config.api.idempieretoken
  let userToken: string | null = null
  try { userToken = await getTokenHelper(event) } catch { userToken = null }

  const callIdempiere = async (path: string, bearer: string) => $fetch<any>(`${config.api.url}/${path}`, {
    method: 'GET',
    headers: { 'Content-Type': 'application/json', Accept: 'application/json', Authorization: 'Bearer ' + bearer }
  })
  const fetchWithFallback = async (path: string): Promise<any> => {
    if (userToken) {
      try { return await callIdempiere(path, userToken) } catch (_) { /* fall through */ }
    }
    if (serviceToken) {
      try { return await callIdempiere(path, serviceToken) } catch (err: any) {
        console.warn(`[fba-partner] service-token read failed for ${path}:`, err?.data?.message || err?.message)
        return null
      }
    }
    return null
  }

  const partner: any = await fetchWithFallback(`models/c_bpartner/${FBA_PARTNER_ID}?$select=Name,Name2,Value,EMail,AD_Org_ID`)
  if (!partner?.id) return null

  const locRes: any = await fetchWithFallback(
    `models/c_bpartner_location?$filter=C_BPartner_ID eq ${FBA_PARTNER_ID} and IsActive eq true&$orderby=C_BPartner_Location_ID asc&$top=20`
  )
  const locations: any[] = locRes?.records || []
  const ship = locations.find((l: any) => l.IsShipTo === true || l.IsShipTo === 'Y') || locations[0] || null
  const bill = locations.find((l: any) => l.IsBillTo === true || l.IsBillTo === 'Y') || ship

  return {
    partner: {
      id: Number(partner.id),
      name: partner.Name || 'Amazon',
      name2: partner.Name2 || '',
      value: partner.Value || '',
      email: partner.EMail || '',
      orgId: partner.AD_Org_ID?.id ?? 0,
    },
    shipLocationId: ship?.id ? Number(ship.id) : null,
    billLocationId: bill?.id ? Number(bill.id) : null,
  }
}

