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

namespace SIGCM2.Application.Rubros.GetById;

public sealed class GetRubroByIdQueryHandler : ICommandHandler<GetRubroByIdQuery, RubroDetailDto>
{
    private readonly IRubroRepository _repo;

    public GetRubroByIdQueryHandler(IRubroRepository repo)
    {
        _repo = repo;
    }

    public async Task<RubroDetailDto> Handle(GetRubroByIdQuery query)
    {
        var rubro = await _repo.GetByIdAsync(query.Id)
            ?? throw new RubroNotFoundException(query.Id);

        return new RubroDetailDto(
            Id: rubro.Id,
            Nombre: rubro.Nombre,
            ParentId: rubro.ParentId,
            Orden: rubro.Orden,
            Activo: rubro.Activo,
            TarifarioBaseId: rubro.TarifarioBaseId,
            FechaCreacion: rubro.FechaCreacion,
            FechaModificacion: rubro.FechaModificacion);
    }
}
