# blog_app/management/commands/aggregate_analytics.py

from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import timedelta
from django.db.models import Count, Sum
from mimansha_main.models import Author, AuthorAnalytics, SiteAnalytics, BlogAnalytics, Blog, Subscriber

class Command(BaseCommand):
    help = 'Aggregate daily analytics'
    
    def handle(self, *args, **options):
        today = timezone.now().date()
        yesterday = today - timedelta(days=1)
        
        # Update author analytics
        for author in Author.objects.filter(rskey=0):
            blogs_count = Blog.objects.filter(author=author, rskey=0).count()
            published_blogs = Blog.objects.filter(author=author, rskey=0, status=Blog.Status.PUBLISHED).count()
            
            # Calculate engagement rate based on views for author's blogs
            blog_ids = Blog.objects.filter(author=author, rskey=0).values_list('id', flat=True)
            total_views = BlogAnalytics.objects.filter(
                blog_id__in=blog_ids,
                date=yesterday
            ).aggregate(total=Sum('views'))['total'] or 0
            
            engagement_rate = min((total_views / (blogs_count * 100) * 100), 100) if blogs_count > 0 else 0
            
            AuthorAnalytics.objects.update_or_create(
                author=author,
                date=yesterday,
                defaults={
                    'total_views': total_views,
                    'total_blogs': blogs_count,
                    'engagement_rate': engagement_rate
                }
            )
        
        # Update site analytics with accurate counts
        new_subscribers = Subscriber.objects.filter(subscribed_at__date=yesterday).count()
        new_authors = Author.objects.filter(rskey=0, created_at__date=yesterday).count()
        new_blogs = Blog.objects.filter(rskey=0, created_at__date=yesterday).count()
        
        SiteAnalytics.objects.update_or_create(
            date=yesterday,
            defaults={
                'new_subscribers': new_subscribers,
                'new_authors': new_authors,
                'new_blogs': new_blogs
            }
        )
        
        self.stdout.write(self.style.SUCCESS(f'Successfully aggregated analytics for {yesterday}'))