from django.core.management.base import BaseCommand
from django.db.models import Sum, Count, Avg
from invoices.models import Invoice
from decimal import Decimal


class Command(BaseCommand):
    help = 'Display invoice statistics'
    
    def add_arguments(self, parser):
        parser.add_argument(
            '--business-id',
            type=str,
            help='Filter by business ID',
        )
    
    def handle(self, *args, **options):
        queryset = Invoice.objects.filter(invoice_type='INVOICE')
        
        if options['business_id']:
            queryset = queryset.filter(business_id=options['business_id'])
        
        stats = queryset.aggregate(
            total_count=Count('id'),
            total_amount=Sum('total_amount'),
            paid_amount=Sum('paid_amount'),
            outstanding_amount=Sum('balance_due'),
        )
        
        status_counts = queryset.values('status').annotate(
            count=Count('id')
        ).order_by('-count')
        
        self.stdout.write(self.style.SUCCESS('\n=== Invoice Statistics ===\n'))
        
        self.stdout.write(f"Total Invoices: {stats['total_count']}")
        self.stdout.write(f"Total Amount: ${stats['total_amount'] or Decimal('0.00'):,.2f}")
        self.stdout.write(f"Paid Amount: ${stats['paid_amount'] or Decimal('0.00'):,.2f}")
        self.stdout.write(f"Outstanding: ${stats['outstanding_amount'] or Decimal('0.00'):,.2f}")
        
        self.stdout.write('\n=== By Status ===\n')
        for item in status_counts:
            self.stdout.write(f"{item['status']}: {item['count']}")
        
        # Overdue info
        overdue = queryset.filter(status='OVERDUE')
        overdue_count = overdue.count()
        overdue_amount = overdue.aggregate(
            total=Sum('balance_due')
        )['total'] or Decimal('0.00')
        
        if overdue_count > 0:
            self.stdout.write(
                self.style.WARNING(
                    f'\n  {overdue_count} overdue invoices totaling ${overdue_amount:,.2f}'
                )
            )