from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.core.paginator import Paginator
from .models import OrderEnquiry
from .forms import OrderEnquiryForm
from django.views.decorators.cache import never_cache


@login_required
@never_cache
def home(request):
    return redirect('dashboard:my_account')


@login_required
@never_cache
def my_account(request):
    user = request.user
    profile = getattr(user, 'profile', None)
    
    context = {
        'user': user,
        'profile': profile,
    }
    return render(request, 'dashboard/my_account.html', context)


@login_required
@never_cache
def my_orders(request):
    enquiries = OrderEnquiry.objects.filter(user=request.user)
    
    status_filter = request.GET.get('status')
    if status_filter:
        enquiries = enquiries.filter(status=status_filter)
    
    paginator = Paginator(enquiries, 10)
    page = request.GET.get('page')
    enquiries = paginator.get_page(page)
    
    context = {
        'enquiries': enquiries,
        'status_choices': OrderEnquiry.Status.choices,
        'current_status': status_filter,
    }
    return render(request, 'dashboard/my_orders.html', context)


@login_required
@never_cache
def order_detail(request, pk):
    enquiry = get_object_or_404(OrderEnquiry, pk=pk, user=request.user)
    
    context = {
        'enquiry': enquiry,
    }
    return render(request, 'dashboard/order_detail.html', context)


@login_required
@never_cache
def order_enquiry(request):
    if request.method == 'POST':
        form = OrderEnquiryForm(request.POST, request.FILES)
        if form.is_valid():
            enquiry = form.save(commit=False)
            enquiry.user = request.user
            enquiry.save()
            
            messages.success(request, 'Your order enquiry has been submitted successfully! We will review it shortly.')
            return redirect('dashboard:my_orders')
    else:
        form = OrderEnquiryForm()
    
    context = {
        'form': form,
    }
    return render(request, 'dashboard/order_enquiry.html', context)
