from misago.categories import PRIVATE_THREADS_ROOT_NAME
from misago.threads.participants import set_users_unread_private_threads_sync

from . import PostingEndpoint, PostingMiddleware


class SyncPrivateThreadsMiddleware(PostingMiddleware):
    """middleware that sets private thread participants to sync unread threads"""

    def use_this_middleware(self):
        if self.mode == PostingEndpoint.REPLY:
            return self.thread.thread_type.root_name == PRIVATE_THREADS_ROOT_NAME
        return False

    def post_save(self, serializer):
        set_users_unread_private_threads_sync(
            participants=self.thread.participants_list,
            exclude_user=self.user,
        )
