package com.social.media.application.analytics.handler;

import com.social.media.application.analytics.dto.AnalyticsResponseDto;
import com.social.media.application.analytics.query.GetAnalyticsReportByIdQuery;
import com.social.media.domain.analytics.aggregate.AnalyticsReport;
import com.social.media.domain.analytics.repository.AnalyticsReportRepository;
import com.social.media.domain.shared.exception.BusinessRuleViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Handler for GetAnalyticsReportByIdQuery
 */
@Service
@Transactional(readOnly = true)
public class GetAnalyticsReportByIdQueryHandler {
    
    private final AnalyticsReportRepository analyticsReportRepository;
    
    public GetAnalyticsReportByIdQueryHandler(AnalyticsReportRepository analyticsReportRepository) {
        this.analyticsReportRepository = analyticsReportRepository;
    }
    
    public AnalyticsResponseDto handle(GetAnalyticsReportByIdQuery query) {
        // Find analytics report
        AnalyticsReport analyticsReport = analyticsReportRepository.findById(query.getAnalyticsId())
            .orElseThrow(() -> new BusinessRuleViolationException("Analytics report not found: " + query.getAnalyticsId().getValue()));
        
        // Return DTO
        return mapToDto(analyticsReport);
    }
    
    private AnalyticsResponseDto mapToDto(AnalyticsReport analyticsReport) {
        return AnalyticsResponseDto.builder(analyticsReport).build();
    }
}

