from django.shortcuts import render

from .models import Voucher

# def voucher_list(request):
#     vouchers = Voucher.objects.all().order_by('-created_at')
#     return render(request, 'vouchers/voucher_list.html', {'vouchers': vouchers, 'brand_filter': None})

# views.py
# from django.db.models import F
# from django.shortcuts import render
# from .models import Voucher

# def voucher_list(request):
#     vouchers = (
#         Voucher.objects
#         .order_by('-created_at')
#         .values(
#             code=F('voucher_code'),
#             pin=F('pin'),
#             serial_number=F('serial_number'),
#             amount=F('value'),
#             expiry_date=F('expiry_date'),
#             created_at=F('created_at'),
#             brand=F('brand__name'),  # include if you want brand name available
#         )
#     )
#     return render(request, 'vouchers/voucher_list.html', {
#         'vouchers': vouchers,
#         'brand_filter': None
#     })

# views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Voucher
from .serializers import VoucherSerializer

@api_view(['GET'])
def voucher_list_api(request):
    """
    Returns all vouchers as JSON
    """
    vouchers = Voucher.objects.select_related('brand').order_by('-created_at')
    serializer = VoucherSerializer(vouchers, many=True)
    return Response(serializer.data)

# views.py
from django.db.models import F
from django.shortcuts import render
from .models import Voucher

def voucher_card_list(request):
    vouchers = (
        Voucher.objects
        .select_related('brand')
        .order_by('-created_at')
        .annotate(
            brand_name=F('brand__name'),
            amount=F('value'),
            code=F('voucher_code'),
        )
        .values(
            'id',
            'voucher_guid',
            'product_name',
            'voucher_name',
            'status',
            'created_at',
            'expiry_date',
            'brand_name',   # << use this in template
            'amount',
            'code',
        )
    )
    return render(request, 'vouchers/voucher_card_list.html', {
        'vouchers': vouchers,
        'brand_filter': None,
    })




from .serializers import VoucherSerializer

# @api_view(['GET'])
def voucher_list(request):
    qs = Voucher.objects.all()#.order_by('-created_at')
    data = VoucherSerializer(qs, many=True).data  # list[dict]
    
    return Response(data)

    # return render(request, 'vouchers/voucher_list.html', {
    #     'vouchers': data,
    #     'brand_filter': None
    # })


def voucher_list_by_brand(request, brand):
    vouchers = Voucher.objects.filter(brand__name__iexact=brand).order_by('-created_at')
    return render(request, 'vouchers/voucher_list.html', {'vouchers': vouchers, 'brand_filter': brand})

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def pull_voucher_page(request):
    print('-------------------iiiiii-------------------------')
    context = {
        "pagetitle": "🎟️ Pull Voucher_",
        "breadcrumbs": [
            {"label": "Dashboard", "url": "dashboard"},
            {"label": "Pull Voucher"}
        ]
    }
    return render(request, 'vouchers/pull_voucher.html', context)



@login_required
def voucher_history_page(request):
    context = {
        "pagetitle": "📜 Voucher Purchase History",
        "breadcrumbs": [
            {"label": "Dashboard", "url": "dashboard"},
            {"label": "Voucher History"}
        ]
    }
    return render(request, 'vouchers/voucher_history.html', context)

# ===============================

# vouchers/views.py
from django.http import JsonResponse
from .models import Brand
from .serializers import BrandSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def brand_list_api(request):
    brands = Brand.objects.all()
    serializer = BrandSerializer(brands, many=True)
    # brands = Brand.objects.all().values(
    #     "product_code",
    #     "name",
    #     "redemption_type",
    #     "brand_type",
    #     "online_redemption_url",
    #     "image_url",
    #     "category",
    #     "description",
    #     "tnc",
    #     "important_instruction",
    #     "redeem_steps",
    #     "denomination_list",
    #     "stock_available",
    #     "updated_at",
    # )
    # return JsonResponse(list(brands), safe=False)
    return Response(serializer.data)


from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import json
from .services import pull_voucher
from django.http import JsonResponse
from .services import pull_voucher

@api_view(['GET'])
def pull_voucher_api(request):
    if request.method != "GET":
        return JsonResponse({"success": False, "reason": "Invalid request method"})

    brand_product_code = request.GET.get("brand_product_code")
    denomination = request.GET.get("denomination")
    quantity = request.GET.get("quantity", 1)
    order_id = request.GET.get("order_id")

    if not all([brand_product_code, denomination, order_id]):
        return JsonResponse({"success": False, "reason": "Missing required parameters"})

    try:
        denomination = float(denomination)
        quantity = int(quantity)
    except ValueError:
        return JsonResponse({"success": False, "reason": "Invalid number format"})

    result = pull_voucher(
        brand_product_code=brand_product_code,
        denomination=denomination,
        quantity=quantity,
        order_id=order_id
    )
    return JsonResponse(result)


from .models import VoucherPurchaseHistory

def voucher_history_api(request):
    records = VoucherPurchaseHistory.objects.select_related('brand').order_by('-created_at')[:100]
    data = [
        {
            "order_id": r.order_id,
            "brand": r.brand.name,
            "denomination": r.denomination,
            "quantity": r.quantity,
            "created_at": r.created_at.strftime("%Y-%m-%d %H:%M"),
            "response": r.response[:50] + "..."  # optional trim
        }
        for r in records
    ]
    return JsonResponse(data, safe=False)
