using Domain.Dtos.Stock;
using Domain.Entities;
    using Domain.Generics;

namespace Core.Interfaces.Stock
{
    // 1.2 Domain (Core)
    public interface IExpeditionDom
    {
        Task<PagedResult<ExpeditionDto>> SearchAsync(
            string? expeditionNumber,
            string? status,
            DateTime? issueDateFrom,
            DateTime? issueDateTo,
            int? locationId,
            int page,
            int pageSize);

        Task<ExpeditionDto?> GetDtoByIdAsync(int id);
        Task<ExpeditionDto?> GetDtoByExpeditionNumberAsync(string expeditionNumber);

        Task<(int Id, string ExpeditionNumber)> CreateAndIssueAsync(
            ELSExpeditionHeader header,
            IEnumerable<ELSExpeditionDetail> details,
            int formSeriesId);
        Task<byte[]> ExportFilteredToExcelAsync(ExpeditionSearchParams searchParams);
        Task MarkInTransitAsync(int expeditionId);
    }
}
