# api/views_recharge_summary.py
from rest_framework.views import APIView
from rest_framework.generics import RetrieveUpdateAPIView
from rest_framework.response import Response
from rest_framework import status
from payments.models import RechargePaymentSummary
from .serializers import RechargePaymentSummarySerializer
from .permissions import IsRoleAdminForWrite
from .utils import parse_range, add_range

class RechargePaymentSummaryListAPI(APIView):
    permission_classes = [IsRoleAdminForWrite]

    def get(self, request):
        order_id = request.query_params.get("order_id")
        mobile = request.query_params.get("mobile") or request.query_params.get("mobile_number")
        start = request.query_params.get("start_date")
        end = request.query_params.get("end_date")

        qs = RechargePaymentSummary.objects.select_related("user").all()
        if order_id:
            qs = qs.filter(order_id=order_id)
        if mobile:
            qs = qs.filter(user__mobile_number=mobile)

        # Model has updated_at (no created_at), so we filter on updated_at
        start_dt, end_dt = parse_range(start, end)
        qs = add_range(qs, "updated_at", start_dt, end_dt)

        try:
            limit = int(request.query_params.get("limit", 50))
            offset = int(request.query_params.get("offset", 0))
        except ValueError:
            limit, offset = 50, 0

        total = qs.count()
        items = qs.order_by("-updated_at")[offset:offset+limit]
        data = RechargePaymentSummarySerializer(items, many=True).data
        return Response({"count": total, "results": data}, status=status.HTTP_200_OK)


class RechargePaymentSummaryDetailAPI(RetrieveUpdateAPIView):
    queryset = RechargePaymentSummary.objects.select_related("user").all()
    serializer_class = RechargePaymentSummarySerializer
    lookup_field = "order_id"
    permission_classes = [IsRoleAdminForWrite]
