from django.core.management.base import BaseCommand
from django.utils import timezone
from django.contrib.auth import get_user_model
from event.models import Event
# Kegiatan imports removed - use event app models instead
from faker import Faker
import random
from datetime import datetime, timedelta
import pytz

User = get_user_model()
fake = Faker('id_ID')

class Command(BaseCommand):
    help = 'Populate database with dummy events and activities'

    def add_arguments(self, parser):
        parser.add_argument(
            '--num_events',
            type=int,
            default=30,
            help='Number of events to create'
        )
        parser.add_argument(
            '--clear_existing',
            action='store_true',
            help='Clear existing events before creating new ones'
        )

    def handle(self, *args, **options):
        num_events = options['num_events']
        clear_existing = options['clear_existing']

        if clear_existing:
            self.stdout.write('Clearing existing events...')
            Event.objects.all().delete()
            Kegiatan.objects.all().delete()
            KategoriKegiatan.objects.all().delete()

        # Create categories if they don't exist
        self.create_categories()

        # Create events
        self.create_events(num_events)

        self.stdout.write(
            self.style.SUCCESS(f'Successfully created {num_events} events!')
        )

    def create_categories(self):
        """Create event categories"""
        categories = [
            {'nama': 'Seminar', 'deskripsi': 'Seminar dan diskusi ilmiah'},
            {'nama': 'Workshop', 'deskripsi': 'Pelatihan praktis dan hands-on'},
            {'nama': 'Pelatihan', 'deskripsi': 'Program pelatihan dan pengembangan diri'},
            {'nama': 'Konferensi', 'deskripsi': 'Konferensi dan pertemuan besar'},
            {'nama': 'Webinar', 'deskripsi': 'Seminar online dan virtual'},
            {'nama': 'Lomba', 'deskripsi': 'Kompetisi dan perlombaan'},
            {'nama': 'Festival', 'deskripsi': 'Festival dan acara budaya'},
            {'nama': 'Bakti Sosial', 'deskripsi': 'Kegiatan sosial dan kemanusiaan'},
            {'nama': 'Olahraga', 'deskripsi': 'Kegiatan olahraga dan kesehatan'},
            {'nama': 'Keagamaan', 'deskripsi': 'Kegiatan keagamaan dan spiritual'},
        ]

        for cat_data in categories:
            category, created = KategoriKegiatan.objects.get_or_create(
                nama=cat_data['nama'],
                defaults=cat_data
            )
            if created:
                self.stdout.write(f'Created category: {category.nama}')

    def create_events(self, num_events):
        """Create dummy events"""
        categories = KategoriKegiatan.objects.all()
        event_categories = [choice[0] for choice in Event.KATEGORI_CHOICES]
        
        # Get or create a user for events
        user, created = User.objects.get_or_create(
            username='admin',
            defaults={
                'email': 'admin@hmi.com',
                'first_name': 'Admin',
                'last_name': 'HMI',
                'is_staff': True,
                'is_superuser': True
            }
        )

        event_titles = [
            # Seminar & Workshop
            "Seminar Nasional Kepemimpinan Islam",
            "Workshop Digital Marketing untuk UMKM",
            "Pelatihan Public Speaking & Presentasi",
            "Seminar Kesehatan Mental di Era Digital",
            "Workshop Kewirausahaan Berbasis Syariah",
            "Pelatihan Manajemen Waktu Produktif",
            "Seminar Literasi Digital & Media Sosial",
            "Workshop Desain Grafis untuk Pemula",
            "Pelatihan Soft Skills untuk Mahasiswa",
            "Seminar Pengembangan Karir Profesional",
            
            # Konferensi & Webinar
            "Konferensi Internasional Studi Islam",
            "Webinar Series: Future of Education",
            "Konferensi Teknologi & Inovasi",
            "Webinar Kesehatan Mental Remaja",
            "Konferensi Ekonomi Syariah Nasional",
            "Webinar Series: Digital Transformation",
            "Konferensi Lingkungan & Sustainability",
            "Webinar Kecerdasan Buatan & Etika",
            "Konferensi Perempuan & Kepemimpinan",
            "Webinar Series: Financial Literacy",
            
            # Lomba & Festival
            "Lomba Debat Bahasa Inggris",
            "Festival Seni & Budaya Islam",
            "Lomba Karya Tulis Ilmiah",
            "Festival Musik Religi",
            "Lomba Fotografi Dokumenter",
            "Festival Kuliner Nusantara",
            "Lomba Desain Poster Kreatif",
            "Festival Film Pendek Islami",
            "Lomba Storytelling Digital",
            "Festival Baca Puisi & Sastra",
            
            # Bakti Sosial & Olahraga
            "Bakti Sosial Peduli Yatim Piatu",
            "Turnamen Futsal Antar Kampus",
            "Bakti Sosial Bantuan Bencana Alam",
            "Marathon Virtual 5K",
            "Bakti Sosial Donor Darah",
            "Turnamen Badminton Mahasiswa",
            "Bakti Sosial Pemberdayaan Masyarakat",
            "Lari Santai Keluarga",
            "Bakti Sosial Pendidikan Gratis",
            "Turnamen Catur Strategis",
        ]

        event_descriptions = [
            "Kegiatan yang bertujuan untuk meningkatkan pengetahuan dan keterampilan peserta dalam berbagai bidang kehidupan.",
            "Program pengembangan diri yang dirancang khusus untuk mahasiswa dan pemuda dalam menghadapi tantangan masa depan.",
            "Acara yang mengedepankan nilai-nilai Islam dalam setiap aspek kehidupan modern dan kontemporer.",
            "Kegiatan interaktif yang menggabungkan teori dan praktik untuk memberikan pengalaman belajar yang optimal.",
            "Program yang fokus pada pengembangan karakter, kepemimpinan, dan kontribusi positif untuk masyarakat.",
            "Acara yang mengintegrasikan teknologi modern dengan nilai-nilai Islam untuk solusi kehidupan sehari-hari.",
            "Kegiatan yang mendorong kreativitas, inovasi, dan semangat kewirausahaan di kalangan generasi muda.",
            "Program yang bertujuan untuk membangun jaringan dan kolaborasi antar generasi dalam berbagai bidang.",
            "Acara yang mengedepankan pentingnya pendidikan karakter dan pengembangan soft skills.",
            "Kegiatan yang mendorong partisipasi aktif dalam membangun masyarakat yang lebih baik dan berkelanjutan."
        ]

        locations = [
            "Aula Utama UIN Sumatera Utara",
            "Gedung Serbaguna Kampus",
            "Ruang Seminar Fakultas",
            "Auditorium Universitas",
            "Lapangan Olahraga Kampus",
            "Masjid Kampus Al-Hikmah",
            "Ruang Pertemuan Rektorat",
            "Gedung Student Center",
            "Aula Fakultas Ilmu Sosial",
            "Ruang Konferensi Internasional",
            "Lapangan Basket Kampus",
            "Gedung Perpustakaan Pusat",
            "Aula Fakultas Teknik",
            "Ruang Multimedia Kampus",
            "Gedung Pusat Kegiatan Mahasiswa",
            "Aula Fakultas Ekonomi",
            "Ruang Sidang Utama",
            "Gedung Laboratorium Terpadu",
            "Aula Fakultas Kedokteran",
            "Ruang Rapat Pimpinan"
        ]

        for i in range(num_events):
            # Generate random dates with timezone awareness
            start_date = fake.date_time_between(start_date='-30d', end_date='+90d')
            start_date = timezone.make_aware(start_date)
            end_date = start_date + timedelta(hours=random.randint(2, 8))
            registration_deadline = start_date - timedelta(days=random.randint(1, 7))
            
            # Generate unique slug
            base_slug = fake.slug()
            slug = base_slug
            counter = 1
            while Event.objects.filter(slug=slug).exists():
                slug = f"{base_slug}-{counter}"
                counter += 1

            # Create Event
            event = Event.objects.create(
                judul=event_titles[i % len(event_titles)],
                slug=slug,
                deskripsi=fake.paragraphs(nb=3, ext_word_list=None),
                deskripsi_singkat=fake.sentence(nb_words=15),
                kategori=random.choice(event_categories),
                lokasi=random.choice(locations),
                alamat_lengkap=fake.address(),
                tanggal_mulai=start_date,
                tanggal_selesai=end_date,
                batas_pendaftaran=registration_deadline,
                waktu_mulai=start_date.time(),
                waktu_selesai=end_date.time(),
                kuota=random.randint(20, 200),
                harga=random.choice([0, 0, 0, 50000, 100000, 150000]),  # Mostly free
                tipe=random.choice(['gratis', 'gratis', 'gratis', 'berbayar']),
                biaya_pendaftaran=random.choice([0, 0, 0, 25000, 50000]),
                status=random.choice(['published', 'published', 'published', 'draft', 'ongoing']),
                is_featured=random.choice([True, False, False, False]),
                is_online=random.choice([True, False, False]),
                link_meeting=fake.url() if random.choice([True, False]) else None,
                kontak_person=fake.name(),
                no_telepon=fake.phone_number(),
                email_kontak=fake.email(),
                created_by=user,
                published_at=start_date if random.choice([True, False]) else None
            )

            # Create corresponding Kegiatan
            category = random.choice(categories)
            kegiatan = Kegiatan.objects.create(
                judul=event.judul,
                deskripsi=event.deskripsi,
                kategori=category,
                tanggal_mulai=event.tanggal_mulai,
                tanggal_selesai=event.tanggal_selesai,
                lokasi=event.lokasi,
                is_active=True
            )

            self.stdout.write(f'Created event: {event.judul}')

        self.stdout.write(
            self.style.SUCCESS(f'Successfully created {num_events} events and activities!')
        )
