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

namespace BLL.Interfaces
{
    public interface IArrivalHandoverFormService
    {
        Task<int> CreateArrivalHandoverFormAsync(ArrivalHandoverFormEntity form);
        Task<ArrivalHandoverFormEntity> GetArrivalHandoverFormByIdAsync(int id);
        Task<ArrivalHandoverFormEntity> GetArrivalHandoverFormByNumberAsync(string handoverNumber);
        Task<List<ArrivalHandoverFormEntity>> GetAllArrivalHandoverFormsAsync();
        Task<int> UpdateArrivalHandoverFormAsync(ArrivalHandoverFormEntity form);
        Task<int> DeleteArrivalHandoverFormAsync(int id);
        Task<string> GenerateArrivalHandoverNumberAsync();
        Task<(List<ArrivalHandoverFormEntity> Forms, int TotalCount)> GetArrivalHandoverFormsBatchAsync(
            int page,
            int pageSize,
            string sortBy,
            string sortOrder,
            string handoverNumber,
            string creator,
            DateTime? startDate = null,
            DateTime? endDate = null);
        Task<(int PackageCount, double LabelRate, long? ArrivalTime, string BillOfLadingNumber, string MasterPackageNumber)> GetReceiptInfoAsync(string arrivalNumber);
        Task<List<ArrivalHandoverFormEntity>> GetArrivalHandoverFormsByHandoverNumberAsync(string handoverNumber);
    }
}
