from django.shortcuts import render, get_object_or_404
from rest_framework import generics, permissions
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
from order.models import *
from product.models import *
from ..serializers import *
from ..models import *
from django.db import transaction
from suscription.custom_pagination import CustomPagination
from Help_Support.decorators import cache_response
from rest_framework.exceptions import ValidationError
from rest_framework.decorators import action
from django.db.models import Q, Sum
from login_signup.custom_permissions import IsCustomAdmin
from rest_framework.generics import UpdateAPIView
import requests 
import logging
from vendor_listing.tasks import send_payout_status_email
from datetime import datetime, timedelta, time
from login_signup.custom_permissions import IsCustomAdmin
from rest_framework.views import APIView


logger = logging.getLogger(__name__)

class ShoppingPointListViewSet(generics.ListAPIView):
    permission_classes = [IsAuthenticated]
    serializer_class = BuyerShoppingPointListingSerializers
    pagination_class = CustomPagination

    def get_queryset(self):
        transaction_type = self.request.query_params.get('transaction_type')
        queryset = ShoppingPoint.objects.filter(user=self.request.user).select_related('order', 'source_user')

        if transaction_type in ['credit', 'debit']:
            queryset = queryset.filter(transaction_type=transaction_type)

        return queryset.order_by('-created_at')

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True, context={'request': request})
            return Response({
                "status": True,
                "message": "Shopping point list fetched successfully",
                "data": self.get_paginated_response(serializer.data).data
            })

        serializer = self.get_serializer(queryset, many=True, context={'request': request})
        return Response({
            "status": True,
            "message": "Shopping point list fetched successfully",
            "data": serializer.data
        })



        vendors = User.objects.filter(is_vendor=True,is_active=True)

        for vendor in vendors:
            credit_total = WalletTransaction.objects.filter(
                vendor=vendor,
                status='completed',
                is_withdraw=False,
                transaction_type='credit'
            ).aggregate(total=Sum('vendor_total_amount'))['total'] or 0

            # withdraw_total = WalletTransaction.objects.filter(
            #     vendor=vendor,
            #     status='completed',
            #     is_withdraw=True,
            #     transaction_type='withdraw'
            # ).aggregate(total=Sum('amount'))['total'] or 0

            balance = credit_total

            logger.info(f"[Wallet Update] Vendor ID: {vendor.id}, "
                        f"Credits: {credit_total}, "
                        f"Final Balance: {balance}")

            WalletBalance.objects.update_or_create(
                vendor=vendor,
                defaults={'balance': balance}
            )

        return Response({"detail": "Wallet balances updated successfully."})