from . import PostingEndpoint, PostingMiddleware
from ....acl.objectacl import add_acl_to_obj
from ....categories import PRIVATE_THREADS_ROOT_NAME
from ....categories.models import Category


class PrivateThreadMiddleware(PostingMiddleware):
    """middleware that sets private threads category for thread and post"""

    def use_this_middleware(self):
        if self.mode == PostingEndpoint.START:
            return self.tree_name == PRIVATE_THREADS_ROOT_NAME
        return False

    def pre_save(self, serializer):
        category = Category.objects.private_threads()

        add_acl_to_obj(self.user_acl, category)

        # set flags for savechanges middleware
        category.update_all = False
        category.update_fields = []

        # assign category to thread and post
        self.thread.category = category
        self.post.category = category