from django.contrib.contenttypes.models import ContentType
from django.db.models import Q

from judge.models import Problem
from judge.utils.problems import editable_problems


def own_ticket_filter(profile_id):
    return Q(assignees__id=profile_id) | Q(user_id=profile_id)


def filter_visible_tickets(queryset, user, profile=None):
    if profile is None:
        profile = user.profile
    return queryset.filter(
        own_ticket_filter(profile.id)
        | Q(
            content_type=ContentType.objects.get_for_model(Problem),
            object_id__in=editable_problems(user, profile),
        )
    ).distinct()
