# recharge/views.py
import uuid
import pandas as pd
from django.shortcuts import render,redirect
from .models import Operator, Circle, RechargeTransaction
import random
from datetime import datetime
from django.conf import settings
from .services.a1topup_api import A1TopupAPI
from django.template.loader import render_to_string
from django.http import JsonResponse, HttpResponse
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib import messages

# def generate_transaction_id():
#     now = datetime.now().strftime('%Y%m%d%H%M%S')
#     rand = random.randint(1000, 9999)
#     return f"VP{now}{rand}"

# # use this like 
# # order_id = generate_transaction_id()
# # order_id = f"VP-{uuid.uuid4().hex[:12].upper()}"

# def recharge_form(request):
#     if not request.user.is_authenticated:
#         return redirect("login")  # Optional safeguard

#     return render(request, 'recharge/recharge_form.html', {
#         'operators': Operator.objects.all(),
#         'circles': Circle.objects.all(),
#         'razorpay_key_id': settings.RAZORPAY_API_KEY,
#         'user_name': f"{request.user.first_name} {request.user.last_name}".strip(),
#         'user_email': request.user.email or ""
#     })

# def fetch_plans(request):
#     operator_code = request.GET.get('operator')
#     circle_code = request.GET.get('circle')

#     # Placeholder: return dummy plans
#     plans = [
#                 {"amount": 99, "description": "Talktime + 200MB", "type": "topup"},
#                 {"amount": 199, "description": "1.5GB/day, 28 days", "type": "data"},
#                 {"amount": 499, "description": "2GB/day, 56 days + OTT", "type": "data"},
#                 {"amount": 29, "description": "100 SMS/day", "type": "sms"},
#             ]

#     return JsonResponse({"plans": plans})

# def check_recharge_status(request):
#     order_id = request.GET.get('order_id')
#     if not order_id:
#         return JsonResponse({"status": "Invalid", "message": "Missing order ID"})
#     a1_api = A1TopupAPI(settings.A1TOPUP_USERNAME, settings.A1TOPUP_PASSWORD)
#     result = a1_api.check_status(
#         orderid=order_id
#     )
#     return JsonResponse(result)

# def fetch_balance():
#     # Replace with actual credentials or load from settings
#     a1_api = A1TopupAPI(settings.A1TOPUP_USERNAME, settings.A1TOPUP_PASSWORD)
#     balance_response = a1_api.check_balance()
#     print("💰 Balance:", balance_response)

#     if "error" in balance_response:
#         return {"status": "error", "message": balance_response["error"]}

#     return {"status": "success", "balance": balance_response}









# @staff_member_required
# def admin_operator_list(request):
#     if request.GET.get('format') == 'json':
#         data = list(Operator.objects.values('id', 'name', 'code', 'service_type', 'source'))
#         return JsonResponse(data, safe=False)
    
#     # Render the HTML page normally
#     sources = Operator.objects.values_list('source', flat=True).distinct()
#     return render(request, 'recharge/admin_operator_list.html', {'sources': sources})

# @staff_member_required
# def update_operator_inline(request):
#     if request.method == "POST":
#         try:
#             op = Operator.objects.get(id=request.POST.get("id"))
#             field = request.POST.get("field")
#             value = request.POST.get("value")
#             setattr(op, field, value)
#             op.save()
#             return JsonResponse({"status": "success"})
#         except Exception as e:
#             return JsonResponse({"status": "error", "message": str(e)}, status=400)
#     return JsonResponse({"status": "invalid"}, status=405)

# @staff_member_required
# def bulk_upload_operators(request):
#     if request.method == 'POST' and request.FILES.get('excel_file'):
#         excel_file = request.FILES['excel_file']
#         try:
#             df = pd.read_excel(excel_file)
#             for _, row in df.iterrows():
#                 Operator.objects.update_or_create(
#                     code=row['code'],
#                     defaults={
#                         'name': row['name'],
#                         'service_type': row['service_type'],
#                         'source': row['source'],
#                     }
#                 )
#             messages.success(request, "Operators imported successfully.")
#         except Exception as e:
#             messages.error(request, f"Error processing file: {e}")
#     return redirect('admin_operator_list')


# @staff_member_required
# def admin_circle_list(request):
#     if request.GET.get('format') == 'json':
#         data = list(Circle.objects.values('id', 'name', 'code', 'source'))
#         return JsonResponse(data, safe=False)

#     sources = Circle.objects.values_list('source', flat=True).distinct()
#     return render(request, 'recharge/admin_circle_list.html', {'sources': sources})

# @staff_member_required
# def update_circle_inline(request):
#     if request.method == "POST":
#         try:
#             circle = Circle.objects.get(id=request.POST.get("id"))
#             setattr(circle, request.POST.get("field"), request.POST.get("value"))
#             circle.save()
#             return JsonResponse({"status": "success"})
#         except Exception as e:
#             return JsonResponse({"status": "error", "message": str(e)})
#     return JsonResponse({"status": "invalid"}, status=405)

# @staff_member_required
# def bulk_upload_circles(request):
#     if request.method == 'POST' and request.FILES.get('excel_file'):
#         excel_file = request.FILES['excel_file']
#         try:
#             df = pd.read_excel(excel_file)
#             for _, row in df.iterrows():
#                 Circle.objects.update_or_create(
#                     code=row['code'],
#                     defaults={
#                         'name': row['name'],
#                         'source': row['source'],
#                     }
#                 )
#             messages.success(request, "Circles uploaded successfully.")
#         except Exception as e:
#             messages.error(request, f"Error: {e}")
#     return redirect('admin_circle_list')

