using System.Collections.Generic;
using System.Threading.Tasks;
using MDL.Models;

namespace BLL.Interfaces
{
    public interface IShippingHandoverFormService
    {
        Task<int> CreateShippingHandoverFormAsync(ShippingHandoverFormEntity form);
        Task<ShippingHandoverFormEntity> GetShippingHandoverFormByIdAsync(int id);
        Task<ShippingHandoverFormEntity> GetShippingHandoverFormByNumberAsync(string handoverNumber);
        Task<List<ShippingHandoverFormEntity>> GetAllShippingHandoverFormsAsync();
        Task<int> UpdateShippingHandoverFormAsync(ShippingHandoverFormEntity form);
        Task<int> DeleteShippingHandoverFormAsync(int id);
        Task<string> GenerateShippingHandoverNumberAsync(string channel = "GOFO");
        Task<(List<ShippingHandoverFormEntity> Forms, int TotalCount)> GetShippingHandoverFormsBatchAsync(
            int page, 
            int pageSize, 
            string sortBy, 
            string sortOrder,
            string handoverNumber,
            string channel,
            string creator,
            System.DateTime? startDeliveryTime = null,
            System.DateTime? endDeliveryTime = null);
        Task<int> UpdateShippingHandoverFormPODAsync(string handoverNumber, string podLinks);
        Task<(string HandoverNumber, string Channel, int BagTagCount, int TotalPackageCount, string Status)> GetShippingHandoverFormDetailsAsync(string handoverNumber);
        Task<bool> ConfirmShippingHandoverFormAsync(string handoverNumber, System.DateTime? deliveryTime, string pod);
    }
}