from rest_framework.permissions import BasePermission

class CanDeleteCartItemPermissions(BasePermission):
    message = "شما دسترسی حذف این ایتم را ندارید"

    def has_object_permission(self, request, view, obj):
        if obj.cart.user != request.user:
            self.message = "این آیتم متعلق به سبد خرید شما نیست."
            return False
        
        # if obj.order.status != 'CART':
        #     self.message = "وضعیت سفارش سبد خرید نیست و آیتمی را نمی‌توانید حذف کنید."
        #     return False
        
        return True
        

class GetOrderPermission(BasePermission):
    message = "شما دسترسی به این سفارش را ندارید"
    def has_object_permission(self, request, view, obj):
        if obj.user != request.user:
            return False
        if obj.status == 'CART':
            self.message = "سفارش در وضعیت سبد خرید است"
            return False
        return True



from rest_framework.permissions import BasePermission

class SetAddressPermissions(BasePermission):
    message = "این ادرس متعلق به شما نیست."

    def has_object_permission(self, request, view, obj):
        if obj.user != request.user:
            self.message = "این ادرس متعلق به شما نیست."
            return False    
        return True
        
class PaymentCallBackPermissions(BasePermission):

    def has_object_permission(self, request, view, obj):
        if obj.order.user != request.user:
            self.message = "این پرداخت متعلق به شما نیست."
            return False    
        return True
    

class ShopOrderAdminPermission:
    def has_view_permission(self, request, obj=None):
        if request.user.is_superuser or obj == None:
            return True
        
        if not hasattr(request.user, 'shop'):
            return False
        
        return request.user.shop == obj.shop
    
    def has_add_permission(self, request):
        return False
    
    def has_delete_permission(self, request, obj=None):

        if request.user.is_superuser:
            return True
        
        if obj is None:
            return False
        
        return obj.shop == request.user.shop
    