from django.utils import timezone
from rest_framework import decorators, response, status, viewsets

from .models import StudyPrayerSession
from .serializers import StudyPrayerSessionSerializer


class StudyPrayerSessionViewSet(viewsets.ModelViewSet):
    serializer_class = StudyPrayerSessionSerializer

    def get_queryset(self):
        return StudyPrayerSession.objects.filter(user=self.request.user).select_related("reminder")

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    @decorators.action(detail=True, methods=["post"])
    def start(self, request, pk=None):
        session = self.get_object()
        session.status = StudyPrayerSession.Status.IN_PROGRESS
        session.started_at = session.started_at or timezone.now()
        session.save(update_fields=["status", "started_at", "updated_at"])
        return response.Response(self.get_serializer(session).data)

    @decorators.action(detail=True, methods=["post"])
    def complete(self, request, pk=None):
        session = self.get_object()
        session.status = StudyPrayerSession.Status.COMPLETED
        session.completed_at = timezone.now()
        if session.started_at:
            session.duration_minutes = max(1, int((session.completed_at - session.started_at).total_seconds() // 60))
        session.notes = request.data.get("notes", session.notes)
        session.save()
        return response.Response(self.get_serializer(session).data, status=status.HTTP_200_OK)
