from datetime import datetime, timedelta

from django.utils import timezone
from rest_framework import viewsets

from .models import Reminder, ReminderSchedule
from .serializers import ReminderScheduleSerializer, ReminderSerializer


def next_occurrence_for(reminder):
    today = timezone.localdate()
    candidate = timezone.make_aware(datetime.combine(today, reminder.preferred_time))
    return candidate if candidate > timezone.now() else candidate + timedelta(days=1)


class ReminderViewSet(viewsets.ModelViewSet):
    serializer_class = ReminderSerializer

    def get_queryset(self):
        return Reminder.objects.filter(user=self.request.user).select_related("schedule")

    def perform_create(self, serializer):
        reminder = serializer.save(user=self.request.user)
        ReminderSchedule.objects.create(reminder=reminder, next_occurrence=next_occurrence_for(reminder))


class ReminderScheduleViewSet(viewsets.ModelViewSet):
    serializer_class = ReminderScheduleSerializer

    def get_queryset(self):
        return ReminderSchedule.objects.filter(reminder__user=self.request.user).select_related("reminder")
