from django.contrib.auth.models import User
from django.db.models import QuerySet, Q

import customrolepermissions


class SBCWorkerQuerySet(QuerySet):
    def related_to(self, request_user: User):
        queryset = self._clone()
        if customrolepermissions.permissions.has_permission_exactly(request_user, 'is_management_manager'):
            pass
        elif customrolepermissions.permissions.has_permission_exactly(request_user, 'is_investor'):
            queryset = queryset.filter(
                Q(fifa_account__investor=request_user) |
                Q(fifa_account__console__investor=request_user) |
                Q(fifa_account__console__investor__investor_operator_user__investor=request_user)
            )
        else:
            queryset = queryset.filter(
                Q(sbc_order__creator=request_user) |
                Q(fifa_account__operators=request_user) |
                Q(fifa_account__console__investor__investor_operator_user__operators__id=request_user.id)
            )
        return queryset


class SBCOrderQuerySet(QuerySet):
    def related_to(self, request_user: User):
        queryset = self._clone()
        if customrolepermissions.permissions.has_permission_exactly(request_user, 'is_management_manager'):
            pass
        else:
            queryset = queryset.filter(Q(creator=request_user))
        return queryset


class AccountCheckHealthyOrderQuerySet(QuerySet):
    def related_to(self, request_user: User):
        queryset = self._clone()
        if customrolepermissions.permissions.has_permission_exactly(request_user, 'is_management_manager'):
            pass
        else:
            queryset = queryset.filter(Q(creator=request_user))
        return queryset


class AccountCheckHealthyWorkerQuerySet(QuerySet):
    def related_to(self, request_user: User):
        queryset = self._clone()
        if customrolepermissions.permissions.has_permission_exactly(request_user, 'is_management_manager'):
            pass
        else:
            queryset = queryset.filter(Q(creator=request_user))
        return queryset
