from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from registration.models import Event, EventType
from feedback.models import FeedbackConfiguration, FeedbackCategory
from datetime import datetime, timedelta
from django.utils import timezone


class Command(BaseCommand):
    help = 'Set up demo data for feedback system'

    def handle(self, *args, **options):
        # Create event types if they don't exist
        conference_type, created = EventType.objects.get_or_create(
            name="Conference",
            defaults={'description': 'Professional conferences and seminars'}
        )
        
        workshop_type, created = EventType.objects.get_or_create(
            name="Workshop",
            defaults={'description': 'Hands-on workshops and training sessions'}
        )

        # Create sample events
        current_event, created = Event.objects.get_or_create(
            name="ICTAZ Annual Conference 2025",
            defaults={
                'event_type': conference_type,
                'description': 'Annual technology conference for ICT professionals',
                'start_date': timezone.now(),
                'end_date': timezone.now() + timedelta(days=3),
                'location': 'Lusaka, Zambia',
                'is_paid': True,
                'amount': 250.00,
                'is_active': True
            }
        )

        past_event, created = Event.objects.get_or_create(
            name="ICTAZ Workshop Series 2024",
            defaults={
                'event_type': workshop_type,
                'description': 'Professional development workshops',
                'start_date': timezone.now() - timedelta(days=90),
                'end_date': timezone.now() - timedelta(days=88),
                'location': 'Ndola, Zambia',
                'is_paid': False,
                'is_active': False
            }
        )

        # Create feedback configuration for current event
        config, created = FeedbackConfiguration.objects.get_or_create(
            defaults={
                'active_event': current_event,
                'is_feedback_enabled': True,
                'welcome_message': f'Welcome to the feedback system for {current_event.name}! Your input helps us improve future events.',
                'thank_you_message': f'Thank you for attending {current_event.name} and providing valuable feedback. We look forward to seeing you at future events!'
            }
        )

        # Create feedback categories if they don't exist
        categories = [
            ('General', 'General feedback and suggestions'),
            ('Content', 'Feedback about event content and presentations'),
            ('Organization', 'Feedback about event organization and logistics'),
            ('Venue', 'Feedback about the venue and facilities'),
            ('Speakers', 'Feedback about speakers and presentations'),
            ('Networking', 'Feedback about networking opportunities'),
        ]

        for name, description in categories:
            FeedbackCategory.objects.get_or_create(
                name=name,
                defaults={'description': description}
            )

        # Create a staff user if it doesn't exist
        if not User.objects.filter(username='admin').exists():
            User.objects.create_superuser(
                username='admin',
                email='admin@ictaz.org',
                password='admin123',
                first_name='Admin',
                last_name='User'
            )
            self.stdout.write(
                self.style.SUCCESS('Created admin user (username: admin, password: admin123)')
            )

        self.stdout.write(
            self.style.SUCCESS(f'Successfully set up demo data:')
        )
        self.stdout.write(f'- Current active event: {current_event.name}')
        self.stdout.write(f'- Past event: {past_event.name}')
        self.stdout.write(f'- Feedback categories: {len(categories)} created')
        self.stdout.write(f'- Feedback enabled: {config.is_feedback_enabled}')
