"""
Endpoint for getting current active QR configuration for payments.
"""
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status, permissions
from apps.core.utils import error_response
from apps.platform.settings.models import QRConfig
from apps.platform.settings.serializers import QRConfigSerializer
from apps.masterdata.platform_setting import PlatformSetting
import logging

logger = logging.getLogger(__name__)


class ActiveQRConfigView(APIView):
    """
    Get the currently active QR code configuration for payment scanning.
    
    GET /api/v1/web/qr-config/active/
    
    Response:
    {
        "success": true,
        "data": {
            "id": 1,
            "qr_image": "url_to_image",
            "qr_image_url": "full_url",
            "company_name": "TrueWave",
            "is_active": true,
            "uploaded_at": "2024-01-01T00:00:00Z",
            "created_by": "admin"
        }
    }
    """
    permission_classes = [permissions.IsAuthenticated]

    def get(self, request):
        try:
            qr_config = QRConfig.objects.filter(is_active=True).first()
            
            if not qr_config:
                return Response(
                    {
                        "success": False,
                        "message": "No active QR configuration found",
                        "data": None
                    },
                    status=status.HTTP_404_NOT_FOUND
                )
            
            serializer = QRConfigSerializer(qr_config, context={'request': request})
            payload = serializer.data
            razorpay_active_mode = PlatformSetting.get_value("razorpay_active_mode", "test") or "test"
            payload["razorpay_active_mode"] = razorpay_active_mode
            payload["razorpay_available"] = bool(
                PlatformSetting.get_value("razorpay_test_key_id", "") or PlatformSetting.get_value("razorpay_live_key_id", "")
            )
            payload["razorpay_key_id"] = PlatformSetting.get_value(
                f"razorpay_{razorpay_active_mode}_key_id",
                "",
            ) or ""
            return Response(
                {
                    "success": True,
                    "data": payload
                },
                status=status.HTTP_200_OK
            )
        except Exception as e:
            logger.error(f"Error retrieving active QR config: {e}", exc_info=True)
            return error_response(
                message=str(e),
                code="RETRIEVAL_FAILED",
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR
            )
