import os
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model

User = get_user_model()

class Command(BaseCommand):
    help = "Erstellt einen initialen Admin-Benutzer (Superuser) sowie Basis-Qualifikationen für das Portal."

    def add_arguments(self, parser):
        parser.add_argument('--username', type=str, default=os.getenv('ADMIN_USERNAME', 'admin'), help='Benutzername für den Admin')
        parser.add_argument('--email', type=str, default=os.getenv('ADMIN_EMAIL', 'admin@local.host'), help='E-Mail-Adresse für den Admin')
        parser.add_argument('--password', type=str, default=os.getenv('ADMIN_PASSWORD', 'adminpassword'), help='Passwort für den Admin')

    def handle(self, *args, **options):
        has_existing_admin = User.objects.filter(is_superuser=True).exists() or User.objects.filter(is_admin_user=True).exists()
        explicit_env_set = bool(os.getenv('ADMIN_USERNAME') or os.getenv('ADMIN_EMAIL'))

        if has_existing_admin and not explicit_env_set and not os.getenv('FORCE_CREATE_ADMIN'):
            self.stdout.write(self.style.SUCCESS("ℹ️ Mindestens ein Admin-Benutzer existiert bereits. Es wurde kein neuer Standard-Admin ('admin@local.host') erstellt."))
        else:
            username = options['username'] or os.getenv('ADMIN_USERNAME', 'admin')
            email = options['email'] or os.getenv('ADMIN_EMAIL', 'admin@local.host')
            password = options['password'] or os.getenv('ADMIN_PASSWORD', 'adminpassword')

            # 1. Admin User
            user, created = User.objects.get_or_create(
                username=username,
                defaults={'email': email}
            )

            if created:
                user.set_password(password)
                user.is_superuser = True
                user.is_staff = True
                user.is_admin_user = True
                user.is_approved = True
                user.is_email_verified = True
                user.is_active = True
                user.save()
                self.stdout.write(self.style.SUCCESS(f"✅ Initialer Admin '{username}' ({email}) wurde erstellt! Passwort: {password}"))
            else:
                changed = False
                if not user.is_superuser or not user.is_admin_user or not user.is_approved or not user.is_active:
                    user.is_superuser = True
                    user.is_staff = True
                    user.is_admin_user = True
                    user.is_approved = True
                    user.is_active = True
                    changed = True
                
                if os.getenv('ADMIN_PASSWORD'):
                    user.set_password(password)
                    changed = True

                if changed:
                    user.save()
                    self.stdout.write(self.style.SUCCESS(f"✅ Admin-Rechte für bestehenden Benutzer '{username}' wurden aktualisiert."))
                else:
                    self.stdout.write(self.style.SUCCESS(f"ℹ️ Admin-Benutzer '{username}' existiert bereits."))

        # 2. Initial Base Skills
        try:
            from apps.events.models import Skill
            Skill.objects.get_or_create(
                name="Ersthelfer",
                defaults={'description': 'Gültiger Erste-Hilfe-Schein', 'color': '#ef4444'}
            )
            Skill.objects.get_or_create(
                name="Bar-Erfahrung",
                defaults={'description': 'Erfahrung an der Zapfanlage', 'color': '#3b82f6'}
            )
            Skill.objects.get_or_create(
                name="Führerschein B",
                defaults={'description': 'PKW / Transporter fahren', 'color': '#10b981'}
            )
        except Exception as e:
            self.stderr.write(self.style.WARNING(f"Hinweis zu Skills: {e}"))
