package com.social.media.application.analytics.handler;

import com.social.media.application.analytics.command.DeleteAnalyticsReportCommand;
import com.social.media.domain.analytics.repository.AnalyticsReportRepository;
import com.social.media.domain.analytics.valueobject.AnalyticsId;
import com.social.media.domain.shared.exception.BusinessRuleViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Handler for DeleteAnalyticsReportCommand
 */
@Service
public class DeleteAnalyticsReportCommandHandler {
    
    private final AnalyticsReportRepository analyticsReportRepository;
    
    public DeleteAnalyticsReportCommandHandler(AnalyticsReportRepository analyticsReportRepository) {
        this.analyticsReportRepository = analyticsReportRepository;
    }
    
    @Transactional
    public void handle(DeleteAnalyticsReportCommand command) {
        // Validate analytics report exists
        AnalyticsId analyticsId = AnalyticsId.of(command.getAnalyticsId());
        if (!analyticsReportRepository.existsById(analyticsId)) {
            throw new BusinessRuleViolationException("Analytics report not found: " + command.getAnalyticsId());
        }
        
        // Delete analytics report
        analyticsReportRepository.deleteById(analyticsId);
    }
}

