# 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

@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')

