from datetime import date, time, timedelta

from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from django.utils import timezone

from accounts.models import Profile, UserNotificationPreference
from analytics.models import StreakHistory
from reminders.models import Reminder, ReminderSchedule
from sessions.models import StudyPrayerSession


class Command(BaseCommand):
    help = "Seed a demo DeepWatch account with reminders, schedules, sessions, and streak history."

    def handle(self, *args, **options):
        user, created = User.objects.get_or_create(username="david", defaults={"email": "david@example.com"})
        if created:
            user.set_password("deepwatch123")
            user.save()

        Profile.objects.get_or_create(
            user=user,
            defaults={
                "display_name": "David",
                "focus_area": "Bible Study",
                "preferred_session_duration": 25,
                "spiritual_goal": "Build a consistent rhythm of prayer and disciplined study.",
            },
        )
        UserNotificationPreference.objects.get_or_create(user=user, defaults={"push_enabled": True, "email_enabled": True})

        reminders = [
            ("Morning Prayer", Reminder.Category.PRAYER, time(7, 0), Reminder.Frequency.DAILY, ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]),
            ("Scripture Meditation", Reminder.Category.BIBLE_STUDY, time(8, 0), Reminder.Frequency.WEEKDAYS, ["mon", "tue", "wed", "thu", "fri"]),
            ("Academic Focus", Reminder.Category.ACADEMIC_STUDY, time(15, 30), Reminder.Frequency.CUSTOM, ["mon", "wed", "fri"]),
            ("Evening Devotion", Reminder.Category.PERSONAL_DEVOTION, time(21, 0), Reminder.Frequency.DAILY, ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]),
        ]
        for title, category, preferred_time, frequency, days in reminders:
            reminder, _ = Reminder.objects.get_or_create(
                user=user,
                title=title,
                defaults={
                    "category": category,
                    "preferred_time": preferred_time,
                    "frequency": frequency,
                    "custom_days": days,
                    "duration_minutes": 25,
                    "priority": "medium",
                    "push_enabled": True,
                },
            )
            ReminderSchedule.objects.get_or_create(
                reminder=reminder,
                defaults={"next_occurrence": timezone.now() + timedelta(hours=2), "timezone": "Africa/Lagos"},
            )

        for index in range(10):
            started = timezone.now() - timedelta(days=index, hours=2)
            StudyPrayerSession.objects.get_or_create(
                user=user,
                title=f"Demo session {index + 1}",
                started_at=started,
                defaults={
                    "category": Reminder.Category.PRAYER if index % 2 == 0 else Reminder.Category.BIBLE_STUDY,
                    "status": StudyPrayerSession.Status.COMPLETED if index != 3 else StudyPrayerSession.Status.MISSED,
                    "completed_at": started + timedelta(minutes=25),
                    "duration_minutes": 25,
                    "notes": "A quiet, focused moment of practice.",
                },
            )
            StreakHistory.objects.get_or_create(
                user=user,
                date=date.today() - timedelta(days=index),
                defaults={"streak_count": 10 - index, "completed_sessions": 1 if index != 3 else 0, "missed_sessions": 1 if index == 3 else 0},
            )

        self.stdout.write(self.style.SUCCESS("Seeded demo user: david / deepwatch123"))
