import {
  ShippingOrderDetails,
  ShippingOrderResult,
  ShipmentTrackingResult,
} from '../dto/shipping.dto';

export interface IShippingProvider {
  /**
   * 1. Authenticate with provider API and verify tokens
   */
  authenticate(): Promise<boolean>;

  /**
   * 2. Synchronize and create shipping order
   */
  createShipment(details: ShippingOrderDetails): Promise<ShippingOrderResult>;

  /**
   * 3. Assign courier partner and generate AWB dispatch tracking ID
   */
  generateAwb(shipmentId: string): Promise<{ success: boolean; awbNumber: string; courierName: string }>;

  /**
   * 4. Request courier pickup scheduling
   */
  requestPickup(awbNumber: string, pickupTime: Date): Promise<{ success: boolean; pickupToken: string; status: string }>;

  /**
   * 5. Cancel pickup schedule
   */
  cancelPickup(pickupToken: string): Promise<boolean>;

  /**
   * 6. Generate shipping / thermal labels PDF download URL
   */
  generateLabel(shipmentId: string): Promise<{ success: boolean; labelUrl: string }>;

  /**
   * 7. Generate invoice PDF download URL
   */
  generateInvoice(shipmentId: string): Promise<{ success: boolean; invoiceUrl: string }>;

  /**
   * 8. Fetch real-time dispatch tracking timeline
   */
  trackShipment(awbNumber: string): Promise<ShipmentTrackingResult>;

  /**
   * 9. Test connection check for configuration admin settings
   */
  testConnection(): Promise<{ connected: boolean; message: string }>;
}
