"""
api/v1/admin/views/feature_flags.py

GET  /api/v1/admin/feature-flags/
     List all platform feature flags.

PATCH /api/v1/admin/feature-flags/<feature_key>/
     Toggle a feature flag on/off.
     Body: { "is_enabled": true }
"""
from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView

from apps.platform.settings.models import PlatformFeatureFlag


class AdminFeatureFlagListView(APIView):
    permission_classes = [permissions.IsAdminUser]

    def get(self, request):
        rows = PlatformFeatureFlag.objects.all()
        # Include all known keys, filling defaults
        defaults = {
            PlatformFeatureFlag.BINARY_TREE_DETAILS: False,
            PlatformFeatureFlag.CHAT_ENABLED: True,
            PlatformFeatureFlag.REGISTRATION_ENABLED: True,
            PlatformFeatureFlag.LOGIN_ENABLED: True,
        }
        existing = {r.feature_key: r for r in rows}
        result = []
        for key, label in PlatformFeatureFlag.FEATURE_CHOICES:
            if key in existing:
                obj = existing[key]
                result.append({
                    'feature_key': key,
                    'label': label,
                    'is_enabled': obj.is_enabled,
                    'updated_at': obj.updated_at.isoformat(),
                    'updated_by': obj.updated_by,
                })
            else:
                result.append({
                    'feature_key': key,
                    'label': label,
                    'is_enabled': defaults.get(key, False),
                    'updated_at': None,
                    'updated_by': None,
                })
        return Response({'success': True, 'data': result})


class AdminFeatureFlagUpdateView(APIView):
    permission_classes = [permissions.IsAdminUser]

    def patch(self, request, feature_key):
        # Validate key
        valid_keys = [k for k, _ in PlatformFeatureFlag.FEATURE_CHOICES]
        if feature_key not in valid_keys:
            return Response({'success': False, 'error': 'Unknown feature key.'}, status=400)

        is_enabled = request.data.get('is_enabled')
        if is_enabled is None:
            return Response({'success': False, 'error': 'is_enabled is required.'}, status=400)

        admin_name = (
            f"{request.user.first_name} {request.user.last_name}".strip()
            or str(request.user)
        )

        obj, _ = PlatformFeatureFlag.objects.get_or_create(feature_key=feature_key)
        obj.is_enabled = bool(is_enabled)
        obj.updated_by = admin_name
        obj.save()

        return Response({
            'success': True,
            'data': {
                'feature_key': obj.feature_key,
                'is_enabled': obj.is_enabled,
                'updated_by': obj.updated_by,
                'updated_at': obj.updated_at.isoformat(),
            },
        })
