from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter
from rest_framework.permissions import IsAuthenticated

from account.permissions import (
    HasTabPermission,
    get_user_data_filter,
    user_can_see_all_shop_data,
)
from shop_management.models.data.account_transaction import AccountTransaction
from shop_management.models.data.passive_income import PassiveIncome
from shop_management.serializers.data.passive_income import PassiveIncomeSerializer
from shop_management.views.data.base import DataRootViewSet
from shop_management.views.data.pagination import CustomPagination


class PassiveIncomeViewSet(DataRootViewSet):
    serializer_class = PassiveIncomeSerializer
    permission_classes = [IsAuthenticated, HasTabPermission]
    required_tab = "passive_income"
    pagination_class = CustomPagination
    filter_backends = [DjangoFilterBackend, SearchFilter]
    filterset_fields = ["shop", "account", "currency"]
    search_fields = ["name", "notes", "account__name"]

    def get_queryset(self):
        qs = PassiveIncome.objects.select_related(
            "shop",
            "account",
            "account__currency",
            "currency",
        ).order_by("-income_date", "-id")
        if user_can_see_all_shop_data(self.request.user, self.required_tab):
            return qs
        return qs.filter(get_user_data_filter(self.request.user, "shop")).distinct()

    def perform_destroy(self, instance):
        AccountTransaction.objects.filter(
            description__startswith=f"Passive income #{instance.id}"
        ).delete()
        super().perform_destroy(instance)
