# # reports/views.py
# from django.shortcuts import render
# from payments.models import ExternalWalletTopUp
# from django.db.models import Q
# from django.contrib.admin.views.decorators import staff_member_required

# @staff_member_required
# def admin_topup_report(request):
#     query = request.GET.get("mobile", "")
#     start = request.GET.get("start_date")
#     end = request.GET.get("end_date")

#     topups = ExternalWalletTopUp.objects.all()

#     if query:
#         topups = topups.filter(user__mobile_number__icontains=query)

#     if start:
#         topups = topups.filter(added_on__date__gte=start)
#     if end:
#         topups = topups.filter(added_on__date__lte=end)

#     topups = topups.select_related("user", "added_by").order_by("-added_on")

#     return render(request, "reports/admin_topup_report.html", {
#         "topups": topups,
#         "query": query,
#         "start": start,
#         "end": end,
#     })

from django.shortcuts import render
from django.contrib.admin.views.decorators import staff_member_required
from payments.models import ExternalWalletTopUp
from django.db.models import Q
from django.utils.dateparse import parse_date

@staff_member_required
def admin_topup_report(request):
    topups = []
    mobile = request.GET.get('mobile')
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')

    filters = Q()
    if mobile:
        filters &= Q(user__mobile_number=mobile)

    if start_date and end_date:
        filters &= Q(added_on__date__range=(parse_date(start_date), parse_date(end_date)))
    elif start_date:
        filters &= Q(added_on__date__gte=parse_date(start_date))
    elif end_date:
        filters &= Q(added_on__date__lte=parse_date(end_date))

    if mobile or start_date or end_date:
        topups = ExternalWalletTopUp.objects.select_related("user", "added_by").filter(filters).order_by('-added_on')

    return render(request, 'reports/admin_topup_report.html', {
        'topups': topups,
        'filter_mobile': mobile or '',
        'filter_start': start_date or '',
        'filter_end': end_date or '',
    })


from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from payments.models import ExternalWalletUsage
from django.utils.dateparse import parse_date
from django.db.models import Q

@login_required
def user_wallet_usage_report(request):
    user = request.user
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')

    filters = Q(user=user)

    if start_date and end_date:
        filters &= Q(used_on__date__range=(parse_date(start_date), parse_date(end_date)))
    elif start_date:
        filters &= Q(used_on__date__gte=parse_date(start_date))
    elif end_date:
        filters &= Q(used_on__date__lte=parse_date(end_date))

    usage_logs = []
    if start_date or end_date:
        usage_logs = ExternalWalletUsage.objects.filter(filters).order_by('-used_on')
        # print(user.id)
        # print(usage_logs)
    context = {
        'usage_logs': usage_logs,
        'filter_start': start_date,
        'filter_end': end_date,
    }
    return render(request, 'reports/user_usage_report.html', context)


# from payments.models import ExternalWalletTopUp
from django.utils.dateparse import parse_date
from django.db.models import Q

@login_required
def user_topup_report(request):
    user = request.user
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')

    filters = Q(user=user)

    if start_date and end_date:
        filters &= Q(added_on__date__range=(parse_date(start_date), parse_date(end_date)))
    elif start_date:
        filters &= Q(added_on__date__gte=parse_date(start_date))
    elif end_date:
        filters &= Q(added_on__date__lte=parse_date(end_date))

    topups = ExternalWalletTopUp.objects.filter(filters).order_by('-added_on') if (start_date or end_date) else []

    context = {
        'topups': topups,
        'filter_start': start_date,
        'filter_end': end_date,
    }
    return render(request, 'reports/user_topup_report.html', context)

from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.db.models import Q
from django.utils.dateparse import parse_date
from payments.models import ExternalWalletTopUp, ExternalWalletUsage


# @login_required
def unified_ext_wallet_report(request):
    user = request.user
    is_admin = user.is_superuser or user.is_staff

    # Filters
    mobile = request.GET.get('mobile')
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')

    filters_topup = Q()
    filters_usage = Q()

    if not is_admin:
        filters_topup &= Q(user=user)
        filters_usage &= Q(user=user)
    elif mobile:
        filters_topup &= Q(user__mobile_number=mobile)
        filters_usage &= Q(user__mobile_number=mobile)

    if start_date:
        filters_topup &= Q(added_on__date__gte=parse_date(start_date))
        filters_usage &= Q(used_on__date__gte=parse_date(start_date))
    if end_date:
        filters_topup &= Q(added_on__date__lte=parse_date(end_date))
        filters_usage &= Q(used_on__date__lte=parse_date(end_date))

    topups = ExternalWalletTopUp.objects.filter(filters_topup).order_by('-added_on')
    usages = ExternalWalletUsage.objects.filter(filters_usage).order_by('-used_on')
    print(is_admin)
    context = {
        'topups': topups,
        'usage_logs': usages,
        'filter_mobile': mobile,
        'filter_start': start_date,
        'filter_end': end_date,
        'is_admin': is_admin,
    }
    return render(request, 'reports/unified_ext_wallet_report.html', context)
