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

namespace SIGCM2.Application.Medios.GetById;

public sealed class GetMedioByIdQueryHandler : ICommandHandler<GetMedioByIdQuery, MedioDetailDto>
{
    private readonly IMedioRepository _repo;

    public GetMedioByIdQueryHandler(IMedioRepository repo)
    {
        _repo = repo;
    }

    public async Task<MedioDetailDto> Handle(GetMedioByIdQuery query)
    {
        var medio = await _repo.GetByIdAsync(query.Id)
            ?? throw new MedioNotFoundException(query.Id);

        return new MedioDetailDto(
            Id: medio.Id,
            Codigo: medio.Codigo,
            Nombre: medio.Nombre,
            Tipo: medio.Tipo,
            PlataformaEmpresaId: medio.PlataformaEmpresaId,
            Activo: medio.Activo,
            FechaCreacion: medio.FechaCreacion,
            FechaModificacion: medio.FechaModificacion);
    }
}
