using SIGCM2.Application.Abstractions;
using SIGCM2.Application.Abstractions.Persistence;
using SIGCM2.Domain.Exceptions;

namespace SIGCM2.Application.PuntosDeVenta.GetById;

public sealed class GetPuntoDeVentaByIdQueryHandler : ICommandHandler<GetPuntoDeVentaByIdQuery, PuntoDeVentaDetailDto>
{
    private readonly IPuntoDeVentaRepository _repo;

    public GetPuntoDeVentaByIdQueryHandler(IPuntoDeVentaRepository repo)
    {
        _repo = repo;
    }

    public async Task<PuntoDeVentaDetailDto> Handle(GetPuntoDeVentaByIdQuery query)
    {
        var pdv = await _repo.GetByIdAsync(query.Id)
            ?? throw new PuntoDeVentaNotFoundException(query.Id);

        return new PuntoDeVentaDetailDto(
            Id: pdv.Id,
            MedioId: pdv.MedioId,
            NumeroAFIP: pdv.NumeroAFIP,
            Nombre: pdv.Nombre,
            Descripcion: pdv.Descripcion,
            Activo: pdv.Activo,
            FechaCreacion: pdv.FechaCreacion,
            FechaModificacion: pdv.FechaModificacion);
    }
}
