"""
Seed data for events app.
"""
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.utils import timezone
from datetime import timedelta
from apps.events.models import Event, EventTemplate, EventInvitation, EventTeam, EventSpeaker, EventScheduleItem, EventRegistration, EventLog

User = get_user_model()


class Command(BaseCommand):
    help = "Seed database with sample events"

    def handle(self, *args, **options):
        # Get or create a demo user
        user, created = User.objects.get_or_create(
            email="nurojilukmansyah@gmail.com"
        )
        if created:
            user.set_password("B6585esp__")
            user.first_name = "Nuroji"
            user.last_name = "Lukmansyah"
            user.save()
            self.stdout.write(f"Created user: {user.email}")

        # Get the Annual Health Conference 2026 event
        try:
            event = Event.objects.get(name="Annual Health Conference 2026")
        except Event.DoesNotExist:
            self.stdout.write(self.style.ERROR("Event 'Annual Health Conference 2026' not found. Run seed_events first."))
            return

        self.stdout.write(f"Seeding related data for: {event.name}")

        # Create team members
        users_data = [
            {"email": "sarah.johnson@apex.com", "name": "Sarah Johnson", "first_name": "Sarah", "last_name": "Johnson", "role": "Content & Program", "is_lead": True},
            {"email": "marcus.lee@nexacore.com", "name": "Marcus Lee", "first_name": "Marcus", "last_name": "Lee", "role": "Logistics", "is_lead": True},
            {"email": "daniel.cruz@apex.com", "name": "Daniel Cruz", "first_name": "Daniel", "last_name": "Cruz", "role": "Logistics", "is_lead": False},
            {"email": "ingrid.h@nexacore.com", "name": "Ingrid Hoffmann", "first_name": "Ingrid", "last_name": "Hoffmann", "role": "Communications", "is_lead": True},
            {"email": "priya.sharma@bluewave.com", "name": "Priya Sharma", "first_name": "Priya", "last_name": "Sharma", "role": "Registration", "is_lead": True},
        ]

        created_users = []
        for u_data in users_data:
            u, created = User.objects.get_or_create(
                email=u_data["email"],
                defaults={"first_name": u_data["first_name"], "last_name": u_data["last_name"]}
            )
            created_users.append(u)
            if created:
                self.stdout.write(f"  Created user: {u.email}")

        # Clear existing teams
        EventTeam.objects.filter(event=event).delete()

        # Create team members
        for i, u_data in enumerate(users_data):
            u = created_users[i]
            team, created = EventTeam.objects.get_or_create(
                event=event,
                user=u,
                defaults={
                    "role": u_data["role"],
                    "is_lead": u_data["is_lead"]
                }
            )
            self.stdout.write(f"  Added team member: {u_data['name']} as {u_data['role']}")

        # Create speakers
        speakers_data = [
            {"name": "Dr. Ahmad Suryadi", "title": "Directeur Jenderal", "organization": "Kemenko Perekonomian", "bio": "Expert in economic policy and development", "session_title": "Keynote: Economic Outlook 2026", "session_type": "keynote", "start_time": "09:00", "end_time": "10:00", "material_status": "uploaded", "material_file": "Ahmad_Suryadi_Keynote.pptx"},
            {"name": "Prof. Retno Wulandari", "title": "Guru Besar HI", "organization": "Universitas Indonesia", "bio": "International law expert", "session_title": "Panel 1: Trade & Investment", "session_type": "panel", "start_time": "10:15", "end_time": "11:45", "material_status": "uploaded", "material_file": "Retno_Panel1_Slides.pdf"},
            {"name": "Bapak Hendra Kusuma", "title": "Presiden Direktur", "organization": "PT. Nusantara Kapital", "bio": "Business leader and investor", "session_title": "Panel 1: Trade & Investment", "session_type": "panel", "start_time": "10:15", "end_time": "11:45", "material_status": "pending"},
            {"name": "Ibu Sri Dewi Rahardjo", "title": "Deputi Bidang Ekonomi Makro", "organization": "Kemenko Perekonomian", "bio": "Macroeconomic policy expert", "session_title": "Panel 2: Digital Economy", "session_type": "panel", "start_time": "13:00", "end_time": "14:30", "material_status": "pending"},
            {"name": "Prof. James Okafor", "title": "Senior Economist", "organization": "World Bank", "bio": "Development economics specialist", "session_title": "Panel 2: Digital Economy", "session_type": "panel", "start_time": "13:00", "end_time": "14:30", "material_status": "uploaded", "material_file": "Okafor_Digital_Economy.pptx"},
            {"name": "Dr. Rizal Fahmi", "title": "Kepala Biro Euras", "organization": "Bank Indonesia", "bio": "Monetary policy expert", "session_title": "Closing Plenary", "session_type": "plenary", "start_time": "14:45", "end_time": "16:00", "material_status": "not_required"},
        ]

        EventSpeaker.objects.filter(event=event).delete()
        for sp_data in speakers_data:
            sp, created = EventSpeaker.objects.get_or_create(
                event=event,
                name=sp_data["name"],
                defaults=sp_data
            )
            self.stdout.write(f"  Added speaker: {sp_data['name']}")

        # Create schedule items
        schedule_data = [
            {"title": "Registration & Welcome Coffee", "session_type": "break", "track": "Main Hall", "start_time": "08:00", "end_time": "08:30"},
            {"title": "Opening Ceremony", "session_type": "ceremony", "track": "Main Hall", "start_time": "08:30", "end_time": "09:00", "speaker_name": "Organizing Committee"},
            {"title": "Keynote: Economic Outlook 2026", "session_type": "keynote", "track": "Main Hall", "start_time": "09:00", "end_time": "10:00", "speaker_name": "Dr. Ahmad Suryadi", "material_file": "Ahmad_Suryadi_Keynote.pptx"},
            {"title": "Coffee Break", "session_type": "break", "track": "Main Hall", "start_time": "10:00", "end_time": "10:15"},
            {"title": "Panel 1: Trade & Investment", "session_type": "panel", "track": "Main Hall", "start_time": "10:15", "end_time": "11:45", "speaker_name": "Prof. Retno Wulandari, et al.", "material_file": "Retno_Panel1_Slides.pdf"},
            {"title": "Lunch Break", "session_type": "break", "track": "Main Hall", "start_time": "11:45", "end_time": "13:00"},
            {"title": "Panel 2: Digital Economy", "session_type": "panel", "track": "Main Hall", "start_time": "13:00", "end_time": "14:30", "speaker_name": "Ibu Sri Dewi Rahardjo, Prof. James Okafor", "material_file": "Okafor_Digital_Economy.pptx"},
            {"title": "Coffee Break", "session_type": "break", "track": "Main Hall", "start_time": "14:30", "end_time": "14:45"},
            {"title": "Closing Plenary", "session_type": "plenary", "track": "Main Hall", "start_time": "14:45", "end_time": "16:00", "speaker_name": "Dr. Rizal Fahmi"},
            {"title": "Welcome Reception", "session_type": "networking", "track": "Main Hall", "start_time": "16:00", "end_time": "17:00"},
            {"title": "Workshop: Policy Framework", "session_type": "workshop", "track": "Room A", "start_time": "10:15", "end_time": "11:45"},
            {"title": "Workshop: Data Governance", "session_type": "workshop", "track": "Room A", "start_time": "13:00", "end_time": "14:30"},
            {"title": "Networking Session", "session_type": "networking", "track": "Room A", "start_time": "14:45", "end_time": "16:00"},
            {"title": "Bilateral Meetings", "session_type": "workshop", "track": "Room B", "start_time": "10:15", "end_time": "11:45"},
            {"title": "Bilateral Meetings", "session_type": "workshop", "track": "Room B", "start_time": "13:00", "end_time": "14:30"},
        ]

        EventScheduleItem.objects.filter(event=event).delete()
        for item_data in schedule_data:
            item, created = EventScheduleItem.objects.get_or_create(
                event=event,
                title=item_data["title"],
                defaults=item_data
            )
            self.stdout.write(f"  Added schedule: {item_data['title']}")

        # Create registrations
        registrations_data = [
            {"name": "Ahmad Fauzi", "email": "ahmad.fauzi@kemenko.go.id", "phone": "+62 811-1111-2222", "company": "Kemenko Perekonomian", "status": "checked_in", "check_in_time": timezone.now() - timedelta(hours=2)},
            {"name": "Rina Wulandari", "email": "rina.w@bi.go.id", "phone": "+62 822-3333-4444", "company": "Bank Indonesia", "status": "checked_in", "check_in_time": timezone.now() - timedelta(hours=1)},
            {"name": "James Okafor", "email": "j.okafor@worldbank.org", "phone": "+62 813-5555-6666", "company": "World Bank", "status": "registered"},
            {"name": "Mei Lin", "email": "mei.lin@adb.org", "phone": "+62 877-7777-8888", "company": "ADB", "status": "registered"},
        ]

        EventRegistration.objects.filter(event=event).delete()
        for reg_data in registrations_data:
            reg, created = EventRegistration.objects.get_or_create(
                event=event,
                email=reg_data["email"],
                defaults=reg_data
            )
            self.stdout.write(f"  Added registration: {reg_data['name']}")

        # Create activity logs
        logs_data = [
            {"actor": user, "action": "created the event", "log_type": "create"},
            {"actor": user, "action": "uploaded", "detail": "Event Concept Note.pdf", "log_type": "file"},
            {"actor": created_users[2], "action": "added task", "detail": "Confirm venue booking", "log_type": "task"},
            {"actor": created_users[3], "action": "added task", "detail": "Send save-the-date emails", "log_type": "task"},
            {"actor": created_users[2], "action": "marked task as done", "detail": "Confirm venue booking", "log_type": "task"},
            {"actor": created_users[3], "action": "marked task as done", "detail": "Send save-the-date emails", "log_type": "task"},
            {"actor": user, "action": "sent invitations to", "detail": "8 contacts", "log_type": "invite"},
            {"actor": created_users[0], "action": "accepted invitation", "log_type": "rsvp"},
            {"actor": created_users[1], "action": "accepted invitation", "log_type": "rsvp"},
            {"actor": created_users[3], "action": "declined invitation", "log_type": "rsvp"},
            {"actor": user, "action": "opened registrations", "log_type": "status"},
            {"actor": created_users[4], "action": "added task", "detail": "Prepare speaker briefing pack", "log_type": "task"},
            {"actor": created_users[0], "action": "uploaded", "detail": "Speaker Briefing.docx", "log_type": "file"},
            {"actor": created_users[1], "action": "uploaded", "detail": "Run of Show.xlsx", "log_type": "file"},
            {"actor": created_users[2], "action": "uploaded", "detail": "Budget Breakdown.xlsx", "log_type": "file"},
        ]

        EventLog.objects.filter(event=event).delete()
        for i, log_data in enumerate(logs_data):
            log, created = EventLog.objects.get_or_create(
                event=event,
                action=log_data["action"],
                defaults={
                    "actor": log_data.get("actor"),
                    "detail": log_data.get("detail", ""),
                    "log_type": log_data["log_type"],
                }
            )
            self.stdout.write(f"  Added log: {log_data['action']}")

        self.stdout.write(self.style.SUCCESS(f"Successfully seeded related data for event: {event.name}"))