# -*- coding: utf-8 -*-
#

from rest_framework import viewsets, mixins
from common.exceptions import JMSException
from common.utils import lazyproperty
from tickets import serializers
from tickets.models import Ticket
from tickets.permissions.comment import IsAssignee, IsApplicant, IsSwagger


__all__ = ['CommentViewSet']


class CommentViewSet(mixins.CreateModelMixin, viewsets.ReadOnlyModelViewSet):
    serializer_class = serializers.CommentSerializer
    permission_classes = (IsSwagger | IsAssignee | IsApplicant,)

    @lazyproperty
    def ticket(self):
        if getattr(self, 'swagger_fake_view', False):
            return None
        ticket_id = self.request.query_params.get('ticket_id')
        ticket = Ticket.all().filter(pk=ticket_id).first()
        if not ticket:
            raise JMSException('Not found Ticket object about `id={}`'.format(ticket_id))
        return ticket

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context['ticket'] = self.ticket
        return context

    def get_queryset(self):
        queryset = self.ticket.comments.all()
        return queryset
