using Core.Interfaces;
using Domain.Entities;
using Models.Interfaces;

namespace Core.Services
{
    public class DeliveryNoteService(IPhSDeliveryNoteRepository deliveryNoteRepository) : IDeliveryNoteDom
    {
        private readonly IPhSDeliveryNoteRepository _deliveryNoteRepository = deliveryNoteRepository;

        public Task<EDeliveryNote?> GetByIdAsync(int id)
        {
            if (id <= 0)
                throw new ArgumentOutOfRangeException(nameof(id), "El identificador del remito es inválido.");

            return _deliveryNoteRepository.GetByIdAsync(id);
        }

        public Task<EDeliveryNote?> GetByDeliveryNoteNumberAsync(string deliveryNoteNumber)
        {
            if (string.IsNullOrWhiteSpace(deliveryNoteNumber))
                throw new ArgumentException("El número de remito es obligatorio.", nameof(deliveryNoteNumber));

            return _deliveryNoteRepository.GetByDeliveryNoteNumberAsync(deliveryNoteNumber.Trim());
        }

        public Task<IEnumerable<EDeliveryNote>> GetByQuoteIdAsync(int quoteId)
        {
            if (quoteId <= 0)
                throw new ArgumentOutOfRangeException(nameof(quoteId), "El identificador del presupuesto es inválido.");

            return _deliveryNoteRepository.GetByQuoteIdAsync(quoteId);
        }
    }
}
