
from django.core.management.base import BaseCommand
from django.utils import timezone
from billing.models import Invoice
from customers.services import CustomerBalanceService

class Command(BaseCommand):
    help = 'Process due invoices by automatically deducting from customer balances'

    def handle(self, *args, **options):
        today = timezone.now().date()
        
        # Get all unpaid invoices that are due
        due_invoices = Invoice.objects.filter(
            status='unpaid',
            due_date__lte=today
        )
        
        processed_count = 0
        failed_count = 0
        
        self.stdout.write(f"Processing {due_invoices.count()} due invoices...")
        
        for invoice in due_invoices:
            try:
                success, message = CustomerBalanceService.process_invoice_payment(invoice)
                if success:
                    processed_count += 1
                    self.stdout.write(
                        self.style.SUCCESS(f"✓ {invoice.invoice_number}: {message}")
                    )
                else:
                    failed_count += 1
                    self.stdout.write(
                        self.style.WARNING(f"⚠ {invoice.invoice_number}: {message}")
                    )
            except Exception as e:
                failed_count += 1
                self.stdout.write(
                    self.style.ERROR(f"✗ {invoice.invoice_number}: Error - {str(e)}")
                )
        
        self.stdout.write(
            self.style.SUCCESS(
                f"\nProcessing complete: {processed_count} paid, {failed_count} failed/insufficient balance"
            )
        )
