# shop_management/views/data/employee.py
from rest_framework.permissions import IsAuthenticated
from account.permissions import (
    HasTabPermission,
    user_can_see_all_shop_data,
    get_user_data_filter,
)
from shop_management.views.data.base import DataRootViewSet
from shop_management.models.data.employee import Employee
from shop_management.serializers.data.employee import EmployeeSerializer
from shop_management.views.data.pagination import CustomPagination
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter
from rest_framework.decorators import action
from rest_framework.response import Response
from shop_management.models.data.shop import shop_id_column_exists

class EmployeeViewSet(DataRootViewSet):
    serializer_class = EmployeeSerializer
    permission_classes = [IsAuthenticated]
    required_tab = "employees"
    pagination_class = CustomPagination
    filter_backends = [DjangoFilterBackend, SearchFilter]
    filterset_fields = ['shop']
    search_fields = ['name', 'email', 'contact']

    def get_queryset(self):
        queryset = Employee.objects.select_related("shop")
        if not shop_id_column_exists():
            queryset = queryset.defer("shop__shop_id")
        if user_can_see_all_shop_data(self.request.user, self.required_tab):
            return queryset.order_by("-id")
        return (
            queryset.filter(get_user_data_filter(self.request.user, "shop"))
            .distinct()
            .order_by("-id")
        )

    @action(detail=False, methods=["get"], url_path="my-shop")
    def my_shop_employees(self, request):
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
