using CMSMicroservice.Application.Common.Interfaces;

namespace CMSMicroservice.Application.PublicMessageCQ.Queries.GetPublicMessage;

public class GetPublicMessageQueryHandler : IRequestHandler<GetPublicMessageQuery, PublicMessageDto?>
{
    private readonly IApplicationDbContext _context;

    public GetPublicMessageQueryHandler(IApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<PublicMessageDto?> Handle(GetPublicMessageQuery request, CancellationToken cancellationToken)
    {
        // TODO: پیاده‌سازی دریافت پیام
        // 1. پیدا کردن پیام:
        //    - var message = await _context.PublicMessages
        //        .AsNoTracking()
        //        .FirstOrDefaultAsync(m => m.Id == request.MessageId, cancellationToken)
        //
        // 2. چک null:
        //    - if (message == null) return null
        //
        // 3. Map به DTO:
        //    - return new PublicMessageDto {
        //        Id = message.Id,
        //        Title = message.Title,
        //        Content = message.Content,
        //        MessageType = message.MessageType,
        //        IsActive = message.IsActive,
        //        IsArchived = message.IsArchived,
        //        StartDate = message.StartDate,
        //        EndDate = message.EndDate,
        //        PublishedAt = message.PublishedAt,
        //        ArchivedAt = message.ArchivedAt,
        //        CreatedAt = message.CreatedAt,
        //        LastModifiedAt = message.LastModifiedAt
        //      }
        //
        // نکته: این query برای Admin است و همه پیام‌ها (حتی آرشیو شده) را برمی‌گرداند
        // نکته: برای کاربران عادی از GetActiveMessages استفاده می‌شود

        throw new NotImplementedException("GetPublicMessage needs implementation");
    }
}
