from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.admin.views.decorators import staff_member_required

from shop.models import Order, OfferRequest
from shop.utils import send_offer_status_update_notification


@staff_member_required
def admin_orders(request):
    orders = Order.objects.all().order_by('-created_at')
    
    if request.headers.get('HX-Request'):
        return render(request, 'shop/partials/admin_order_rows.html', {
            'orders': orders
        })

    return render(request, 'shop/admin_orders.html', {'orders': orders})

@staff_member_required
def update_order_status(request, order_id):
    order = get_object_or_404(Order, id=order_id)

    if request.method == 'POST':
        new_status = request.POST.get('status')
        order.status = new_status
        order.save()

        return render(request, 'shop/partials/admin_order_rows.html', {
            'orders': Order.objects.all().order_by('-created_at')
        })

    return HttpResponse(status=400)


@staff_member_required
def admin_offer_requests(request):
    offers = OfferRequest.objects.select_related('product', 'user').order_by('-created_at')

    return render(request, 'shop/admin_offer_requests.html', {
        'offers': offers
    })


@staff_member_required
def update_offer_status(request, offer_id):
    offer = get_object_or_404(OfferRequest, id=offer_id)

    if request.method == 'POST':
        new_status = request.POST.get('status')
        admin_response = request.POST.get('admin_response', '').strip()
        if new_status in ['Pending', 'Accepted', 'Declined']:
            offer.status = new_status
            offer.admin_response = admin_response
            offer.save()
            send_offer_status_update_notification(offer)

        return redirect('shop:admin_offer_requests')

    return HttpResponse(status=400)
