"""
Django Management Command: Check Subscription Data
Save as: apps/business/management/commands/check_subscription.py

Usage: python manage.py check_subscription admin@example.com
"""

from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from apps.business.models import Business, BusinessMembership, BusinessSubscription
from django.utils import timezone

User = get_user_model()


class Command(BaseCommand):
    help = 'Check subscription data for a user'

    def add_arguments(self, parser):
        parser.add_argument('email', type=str, help='User email address')

    def handle(self, *args, **options):
        email = options['email']
        
        try:
            user = User.objects.get(email=email)
            self.stdout.write(self.style.SUCCESS(f'\n✓ Found user: {user.get_full_name()} ({user.email})'))
            
            # Check memberships
            memberships = BusinessMembership.objects.filter(user=user).select_related('business', 'role')
            self.stdout.write(f'\nMemberships: {memberships.count()}')
            
            for membership in memberships:
                self.stdout.write(f'\n  Business: {membership.business.name}')
                self.stdout.write(f'  Role: {membership.role.name}')
                self.stdout.write(f'  Status: {membership.status}')
                self.stdout.write(f'  Primary: {membership.is_primary}')
                
                # Check subscription
                try:
                    subscription = BusinessSubscription.objects.select_related('plan').get(
                        business=membership.business
                    )
                    
                    self.stdout.write(self.style.SUCCESS(f'\n  ✓ Subscription Found:'))
                    self.stdout.write(f'    Plan: {subscription.plan.name}')
                    self.stdout.write(f'    Status: {subscription.status}')
                    self.stdout.write(f'    Billing Cycle: {subscription.billing_cycle}')
                    
                    if subscription.trial_end_date:
                        days_left = (subscription.trial_end_date - timezone.now().date()).days
                        self.stdout.write(f'    Trial End: {subscription.trial_end_date} ({days_left} days left)')
                    
                    if subscription.end_date:
                        days_left = (subscription.end_date - timezone.now().date()).days
                        self.stdout.write(f'    End Date: {subscription.end_date} ({days_left} days left)')
                    
                    self.stdout.write(f'\n  Usage:')
                    self.stdout.write(f'    Locations: {subscription.current_locations_count}/{subscription.plan.max_locations}')
                    self.stdout.write(f'    Users: {subscription.current_users_count}/{subscription.plan.max_users}')
                    self.stdout.write(f'    Inventory: {subscription.current_inventory_count}/{subscription.plan.max_inventory_items}')
                    self.stdout.write(f'    Transactions: {subscription.monthly_transaction_count}/{subscription.plan.max_monthly_transactions}')
                    
                except BusinessSubscription.DoesNotExist:
                    self.stdout.write(self.style.WARNING(f'\n  ⚠ No subscription found'))
                    self.stdout.write(f'    Business Status: {membership.business.status}')
                    self.stdout.write(f'\n  SOLUTION: Create a subscription:')
                    self.stdout.write(f'    python manage.py create_trial_subscription {membership.business.id}')
                
        except User.DoesNotExist:
            self.stdout.write(self.style.ERROR(f'\n✗ User not found: {email}'))