/**
 * Shipper (carrier) → logo asset resolver.
 *
 * Centralises the mapping that is otherwise repeated as inline v-if chains
 * (components/AgGrid/SalesOrder/AgShipper.vue, components/sales/OrderForm.vue).
 * Assets live in public/assets/shipper/ and are referenced as /assets/shipper/…
 *
 * Matching rules, in priority order:
 *   1. hardcoded shipper ids (GEL Express 1000002, Cargo International 1000005,
 *      DHL Express 1000006) — these carriers have no distinctive config/name
 *   2. "DHL Express" by name (checked BEFORE plain DHL)
 *   3. DHL by M_ShipperCfg_ID identifier or name prefix
 *   4. DPD / GLS / GEL / Cargo by name
 *   5. null → caller renders a fallback (icon + initials)
 */
export interface ShipperLike {
  id?: any
  name?: string
  cfgIdentifier?: string
}

const ID_LOGOS: Record<string, string> = {
  '1000002': '/assets/shipper/gelexpress.png',
  '1000005': '/assets/shipper/cargo_logo_small.png',
  '1000006': '/assets/shipper/dhlexpress.png'
}

export const shipperLogoSrc = (s: ShipperLike | null | undefined): string | null => {
  if(!s) return null
  const id = s.id != null ? String(s.id) : ''
  if(id && ID_LOGOS[id]) return ID_LOGOS[id]

  const name = String(s.name || '').trim()
  const upper = name.toUpperCase()
  const cfg = String(s.cfgIdentifier || '').trim().toUpperCase()

  if(upper.includes('DHL') && upper.includes('EXPRESS')) return '/assets/shipper/dhlexpress.png'
  if(cfg === 'DHL' || upper.startsWith('DHL')) return '/assets/shipper/dhl_logo_small.svg'
  if(upper.startsWith('DPD')) return '/assets/shipper/dpd_logo_small.png'
  if(upper.startsWith('GLS')) return '/assets/shipper/gls_logo_small.svg'
  if(upper.includes('GEL')) return '/assets/shipper/gelexpress.png'
  if(upper.includes('CARGO')) return '/assets/shipper/cargo_logo_small.png'
  return null
}

/** Two-letter badge text for shippers without a logo asset ("Hermes" → "HE", "Deutsche Post" → "DP"). */
export const shipperInitials = (name: string | null | undefined): string => {
  const words = String(name || '').trim().split(/\s+/).filter(Boolean)
  if(words.length === 0) return '?'
  if(words.length === 1) return words[0].substring(0, 2).toUpperCase()
  return (words[0][0] + words[1][0]).toUpperCase()
}

export const useShipperLogo = () => ({ shipperLogoSrc, shipperInitials })
