import Order from '#models/order'

export interface ShipmentResult {
  trackingNumber: string
  labelUrl?: string
  labelData?: string // Base64 encoded label
  invoiceUrl?: string
  provider: string
  cost?: number
  currency?: string
  apiResponse?: any
}

export interface TrackingResult {
  trackingNumber: string
  status: string
  history: {
    status: string
    location: string
    timestamp: string
    description: string
  }[]
}

export interface RateResult {
  amount: number
  currency: string
  provider: string
  serviceName?: string
  estimatedDeliveryDate?: string
  courierRate?: number
  margin?: number
}

import InternationalOrder from '#models/international_order'

export interface ShippingProviderContract {
  createShipment(order: Order, internationalOrder?: InternationalOrder): Promise<ShipmentResult>
  trackShipment(trackingNumber: string): Promise<TrackingResult>
  cancelShipment(trackingNumber: string): Promise<boolean>
  generateLabel(trackingNumber: string): Promise<string> // Returns URL or Base64
  calculateRate(order: Order): Promise<RateResult>
}
