# orders/views.py - ایجاد فایل جدید
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.http import JsonResponse
from django.db import transaction
from django.utils import timezone
from shop.models import Cart, CartItem
from .models import Order, OrderItem, Payment, Shipping
import json

@login_required
def checkout_view(request):
    """صفحه تسویه حساب"""
    cart = get_or_create_cart(request)
    
    if not cart or cart.items.count() == 0:
        messages.warning(request, 'سبد خرید شما خالی است.')
        return redirect('shop:cart')
    
    # محاسبه جمع کل
    cart_items = cart.items.all()
    subtotal = sum(item.get_total_price() for item in cart_items if item.product)
    shipping_cost = 25000  # هزینه ثابت ارسال
    total = subtotal + shipping_cost
    
    if request.method == 'POST':
        # ذخیره اطلاعات سفارش
        try:
            with transaction.atomic():
                # ایجاد سفارش
                order = Order.objects.create(
                    user=request.user,
                    total_price=total,
                    full_name=request.POST.get('full_name'),
                    phone=request.POST.get('phone'),
                    email=request.POST.get('email'),
                    shipping_address=request.POST.get('address'),
                    postal_code=request.POST.get('postal_code'),
                    city=request.POST.get('city'),
                    province=request.POST.get('province'),
                    notes=request.POST.get('notes', ''),
                )
                
                # افزودن آیتم‌های سفارش
                for cart_item in cart_items:
                    OrderItem.objects.create(
                        order=order,
                        product=cart_item.product,
                        quantity=cart_item.quantity,
                        price=cart_item.product.price,
                    )
                
                # ایجاد رکورد پرداخت
                payment = Payment.objects.create(
                    order=order,
                    amount=total,
                    gateway='zarinpal',  # یا درگاه انتخابی
                )
                
                # ایجاد رکورد حمل و نقل
                Shipping.objects.create(
                    order=order,
                    shipping_cost=shipping_cost,
                    estimated_delivery=timezone.now() + timezone.timedelta(days=3),
                )
                
                # خالی کردن سبد خرید
                cart.items.all().delete()
                
                # هدایت به صفحه پرداخت
                return redirect('orders:payment', order_id=order.id)
                
        except Exception as e:
            messages.error(request, f'خطا در ایجاد سفارش: {str(e)}')
    
    return render(request, 'orders/checkout.html', {
        'cart_items': cart_items,
        'subtotal': subtotal,
        'shipping_cost': shipping_cost,
        'total': total,
    })

def payment_view(request, order_id):
    """صفحه پرداخت"""
    order = get_object_or_404(Order, id=order_id, user=request.user)
    payment = getattr(order, 'payment', None)
    
    # شبیه‌سازی درگاه پرداخت (در واقعیت باید به درگاه واقعی متصل شوید)
    # اینجا فقط یک شبیه‌سازی ساده است
    
    if request.method == 'POST' and request.POST.get('pay_now'):
        try:
            # شبیه‌سازی پرداخت موفق
            payment.mark_as_paid(ref_id='TEST123456', transaction_id='TRX789012')
            
            messages.success(request, 'پرداخت شما با موفقیت انجام شد!')
            return redirect('orders:order_detail', order_id=order.id)
        except Exception as e:
            messages.error(request, f'خطا در پرداخت: {str(e)}')
    
    return render(request, 'orders/payment.html', {
        'order': order,
        'payment': payment,
    })

@login_required
def my_orders_view(request):
    """لیست سفارش‌های کاربر"""
    orders = Order.objects.filter(user=request.user).order_by('-created_at')
    
    return render(request, 'orders/my_orders.html', {
        'orders': orders,
    })

@login_required
def order_detail_view(request, order_id):
    """جزئیات سفارش"""
    order = get_object_or_404(Order, id=order_id, user=request.user)
    
    return render(request, 'orders/order_detail.html', {
        'order': order,
    })

def track_order_view(request):
    """پیگیری سفارش"""
    order_number = request.GET.get('order_number')
    phone = request.GET.get('phone')
    
    order = None
    if order_number and phone:
        try:
            order = Order.objects.get(order_number=order_number, phone=phone)
        except Order.DoesNotExist:
            messages.error(request, 'سفارشی با این مشخصات یافت نشد.')
    
    return render(request, 'orders/track_order.html', {
        'order': order,
        'order_number': order_number,
        'phone': phone,
    })

# تابع کمکی برای دریافت سبد خرید
def get_or_create_cart(request):
    from shop.views import get_or_create_cart as shop_get_cart
    return shop_get_cart(request)