from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from recharge.models import RechargeTransaction
import logging

logger = logging.getLogger(__name__)

@csrf_exempt
def a1topup_callback(request):
    txid = request.GET.get("txid")
    status = request.GET.get("status")
    opid = request.GET.get("opid")

    if not txid or not status:
        logger.warning(f"[A1Topup Callback] Missing required parameters: txid={txid}, status={status}")
        return JsonResponse({"error": "Missing txid or status"}, status=400)

    if status not in ["Success", "Failure"]:
        logger.warning(f"[A1Topup Callback] Invalid status: {status}")
        return JsonResponse({"error": "Invalid status"}, status=400)

    try:
        recharge = RechargeTransaction.objects.get(order_id=txid)

        # Only update if still pending
        if recharge.status != status:
            recharge.status = status
            if not recharge.response_data:
                recharge.response_data = {}
            recharge.response_data.update({
                "callback_opid": opid,
                "callback_status": status,
                "callback_received_at": str(recharge.created_at),
            })
            recharge.save()

            logger.info(f"[A1Topup Callback] Updated txid={txid} to status={status}")
        else:
            logger.info(f"[A1Topup Callback] txid={txid} already marked as {status}")

        return JsonResponse({"message": "Callback processed successfully."})

    except RechargeTransaction.DoesNotExist:
        logger.error(f"[A1Topup Callback] RechargeTransaction with order_id={txid} not found.")
        return JsonResponse({"error": "Recharge transaction not found."}, status=404)
