
from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import timedelta
from apps.inventory.models import InventoryItem


class Command(BaseCommand):
    help = 'Check for expiring warranties and send notifications'
    
    def add_arguments(self, parser):
        parser.add_argument(
            '--days',
            type=int,
            default=30,
            help='Check warranties expiring in X days (default: 30)'
        )
    
    def handle(self, *args, **options):
        days_ahead = options['days']
        today = timezone.now().date()
        expiry_date = today + timedelta(days=days_ahead)
        
        expiring_items = InventoryItem.objects.filter(
            warranty_end_date__gte=today,
            warranty_end_date__lte=expiry_date,
            status__in=['IN_STOCK', 'SOLD']
        ).select_related('business', 'brand', 'location')
        
        count = expiring_items.count()
        
        if count > 0:
            self.stdout.write(
                self.style.WARNING(
                    f'Found {count} items with warranties expiring in next {days_ahead} days'
                )
            )
            
            # Group by business
            by_business = {}
            for item in expiring_items:
                if item.business_id not in by_business:
                    by_business[item.business_id] = []
                by_business[item.business_id].append(item)
            
            for business_id, items in by_business.items():
                business_name = items[0].business.name
                self.stdout.write(f'\nBusiness: {business_name}')
                
                for item in items:
                    days_remaining = (item.warranty_end_date - today).days
                    self.stdout.write(
                        f'  - {item.brand.name} {item.model} '
                        f'({item.asset_id}): expires in {days_remaining} days'
                    )
                
                # TODO: Send notification
                # notification_service.send_warranty_expiry_alert(business_id, items)
        else:
            self.stdout.write(
                self.style.SUCCESS('No warranties expiring soon')
            )
