from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import action

class ToggleActiveStatusMixin:

    
    @action(detail=True, methods=['get', 'post'])
    def toggle_status(self, request, pk=None):
        try:
            obj = self.get_object()

            if hasattr(obj, 'user'):
                target_user = obj.user
            else:
                target_user = obj

            if target_user == request.user:
                return Response(
                    {'error': 'You cannot change your own status.'},
                    status=status.HTTP_403_FORBIDDEN
                )
            obj.is_active = not obj.is_active
            
            if hasattr(obj, 'updated_by'):
                obj.updated_by = request.user
            
            update_fields = ['is_active']
            if hasattr(obj, 'updated_by'):
                update_fields.append('updated_by')
            
            obj.save(update_fields=update_fields)
            
            return Response({
                'status': f'{obj._meta.model.__name__} status has been toggled.',
                'new_status': 'Active' if obj.is_active else 'Inactive',
                'is_active': obj.is_active
            })
            
        except Exception as e:
            return Response(
                {'error': f'{self.queryset.model.__name__} not found with the provided ID.'},
                status=status.HTTP_404_NOT_FOUND
            )
        
