from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from ai.models import AdminAIAnalysis

class Command(BaseCommand):
    help = 'Assign admin LLM analysis permission to a user'

    def add_arguments(self, parser):
        parser.add_argument(
            '--user-id',
            type=int,
            help='User ID to assign permission to',
        )
        parser.add_argument(
            '--phone',
            type=str,
            help='User phone to assign permission to',
        )

    def handle(self, *args, **options):
        User = get_user_model()
        
        # Get user
        user = None
        if options['user_id']:
            try:
                user = User.objects.get(id=options['user_id'])
            except User.DoesNotExist:
                self.stdout.write(
                    self.style.ERROR(f'User with ID {options["user_id"]} does not exist')
                )
                return
        elif options['phone']:
            try:
                user = User.objects.get(phone=options['phone'])
            except User.DoesNotExist:
                self.stdout.write(
                    self.style.ERROR(f'User with phone {options["phone"]} does not exist')
                )
                return
        else:
            self.stdout.write(
                self.style.ERROR('Please provide either --user-id or --phone')
            )
            return

        # Get or create the permission
        content_type = ContentType.objects.get_for_model(AdminAIAnalysis)
        try:
            permission = Permission.objects.get(
                codename='can_send_admin_llm_analysis',
                content_type=content_type,
            )
        except Permission.DoesNotExist:
            permission = Permission.objects.create(
                codename='can_send_admin_llm_analysis',
                name='Can send admin LLM analysis',
                content_type=content_type,
            )

        # Assign permission to user
        user.user_permissions.add(permission)
        
        self.stdout.write(
            self.style.SUCCESS(
                f'Successfully assigned "can_send_admin_llm_analysis" permission to user: {user.phone} (ID: {user.id})'
            )
        )
        
        # Show user's current permissions
        self.stdout.write('\nUser permissions:')
        for perm in user.user_permissions.all():
            self.stdout.write(f'  - {perm.name} ({perm.codename})') 