using Domain.Dtos.Stock;
using Domain.Entities;
using Domain.Generics;
namespace Models.Interfaces
{
// 1.1 Data (Repo)
public interface IExpeditionRepository
{
///
/// Verifica si alguno de los stock items indicados ya está asociado
/// a otra expedición activa. Utilizado para prevenir doble traza.
///
/// Lista de stockitem_id a validar.
///
/// Expedición a ignorar (usado en edición para no detectar conflicto consigo misma).
///
/// Lista de conflictos encontrados.
Task> CheckStockItemConflictsAsync(IEnumerable stockItemIds, int? ignoreExpeditionId);
///
/// Crea la expedición completa (encabezado + detalles) y la deja emitida con numeración de serie.
///
Task<(int Id, string Expeditionnumber)> CreateFullExpeditionAsync(ELSExpeditionHeader expedition, int formSeriesId);
Task GetDtoByIdAsync(int id);
Task> SearchAsync(string? expeditionNumber, string? status, DateTime? issueDateFrom, DateTime? issueDateTo, int? locationId, int page, int pageSize);
Task MarkInTransitAsync(int expeditionId);
}
}