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

namespace SIGCM2.Application.Secciones.GetById;

public sealed class GetSeccionByIdQueryHandler : ICommandHandler<GetSeccionByIdQuery, SeccionDetailDto>
{
    private readonly ISeccionRepository _repo;

    public GetSeccionByIdQueryHandler(ISeccionRepository repo)
    {
        _repo = repo;
    }

    public async Task<SeccionDetailDto> Handle(GetSeccionByIdQuery query)
    {
        var seccion = await _repo.GetByIdAsync(query.Id)
            ?? throw new SeccionNotFoundException(query.Id);

        return new SeccionDetailDto(
            Id: seccion.Id,
            MedioId: seccion.MedioId,
            Codigo: seccion.Codigo,
            Nombre: seccion.Nombre,
            Tipo: seccion.Tipo,
            Activo: seccion.Activo,
            FechaCreacion: seccion.FechaCreacion,
            FechaModificacion: seccion.FechaModificacion);
    }
}
