import 'dart:async';

import 'package:fcs/domain/entities/shipment.dart';
import 'package:fcs/helpers/api_helper.dart';
import 'package:fcs/helpers/firebase_helper.dart';
import 'package:logging/logging.dart';

class ShipmentDataProvider {
  final log = Logger('ShipmentDataProvider');

  static final ShipmentDataProvider instance = ShipmentDataProvider._();
  ShipmentDataProvider._();

  Future<void> createShipment(Shipment shipment) async {
    return await requestAPI("/shipments", "POST",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> updateShipment(Shipment shipment) async {
    return await requestAPI("/shipments", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> cancelShipment(Shipment shipment) async {
    return await requestAPI("/shipments/cancel", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> assignShipment(Shipment shipment) async {
    return await requestAPI("/shipments/assign", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> completeAssignShipment(Shipment shipment) async {
    return await requestAPI("/shipments/assign/complete", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> completePickupShipment(Shipment shipment) async {
    return await requestAPI("/shipments/pickup/complete", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> packShipment(Shipment shipment) async {
    return await requestAPI("/shipments/pack", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> completePackShipment(Shipment shipment) async {
    return await requestAPI("/shipments/pack/complete", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> confirmShipment(Shipment shipment) async {
    return await requestAPI("/shipments/confirm", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> completeConfirmShipment(Shipment shipment) async {
    return await requestAPI("/shipments/confirm/complete", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> completeReceiveShipment(Shipment shipment) async {
    return await requestAPI("/shipments/receive/complete", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> pickupShipment(Shipment shipment) async {
    return await requestAPI("/shipment_pickup", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }

  Future<void> receiveShipment(Shipment shipment) async {
    return await requestAPI("/shipment_receive", "PUT",
        payload: shipment.toMap(), token: await getToken());
  }
}
