

from shop.models import Order
from datetime import timedelta
from django.contrib import messages
from django.shortcuts import render
from django.db.models import Sum, Count
from django.contrib.auth.models import User
from shop.utils import _get_customer_profile
from .models import ShippingAddress
from django.utils.timezone import now, timedelta
from .forms import ShippingAddressForm, CustomerProfileForm
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404

@login_required
def customer_profile(request):
    customer_profile = _get_customer_profile(request.user)
    if request.method == 'POST':
        form = CustomerProfileForm(request.POST, request.FILES or None, instance=customer_profile)
        if form.is_valid():
            form.save()
            messages.success(request, "Your profile has been updated successfully!")
            return redirect('accounts:customer_profile')
    else:
        form = CustomerProfileForm(instance=customer_profile)
    
    return render(request, 'accounts/customer_profile.html', {'form': form, 'customer': request.user})

@login_required
def customer_profile_edit(request):
    """Same as profile but with clearer edit intent"""
    return customer_profile(request)

# DELETE
@login_required
def customer_delete(request):
    if request.method == 'POST':
        request.user.delete()
        return redirect('home')

    return render(request, 'accounts/customer_confirm_delete.html')

# === SHIPPING ADDRESS CRUD ===
@login_required
def shipping_address_list(request):
    customer_profile = _get_customer_profile(request.user)
    addresses = customer_profile.shipping_addresses.all()
    return render(request, 'address/shipping_address_list.html', {'addresses': addresses})

@login_required
def shipping_address_create(request):
    customer_profile = _get_customer_profile(request.user)
    if request.method == 'POST':
        form = ShippingAddressForm(request.POST)
        if form.is_valid():
            address = form.save(commit=False)
            address.customer = customer_profile
            address.save()
            messages.success(request, "New shipping address added successfully!")
            return redirect('accounts:shipping_address_list')
    else:
        form = ShippingAddressForm()
    return render(request, 'address/shipping_address_form.html', {'form': form, 'title': 'Add New Shipping Address'})

@login_required
def shipping_address_edit(request, address_id):
    customer_profile = _get_customer_profile(request.user)
    address = get_object_or_404(ShippingAddress, id=address_id, customer=customer_profile)
    if request.method == 'POST':
        form = ShippingAddressForm(request.POST, instance=address)
        if form.is_valid():
            form.save()
            messages.success(request, "Shipping address updated!")
            return redirect('accounts:shipping_address_list')
    else:
        form = ShippingAddressForm(instance=address)
    return render(request, 'address/shipping_address_form.html', {'form': form, 'title': 'Edit Shipping Address'})

@login_required
def shipping_address_delete(request, address_id):
    customer_profile = _get_customer_profile(request.user)
    address = get_object_or_404(ShippingAddress, id=address_id, customer=customer_profile)
    if request.method == 'POST':
        address.delete()
        messages.success(request, "Shipping address deleted.")
        return redirect('accounts:shipping_address_list')
    return render(request, 'address/shipping_address_confirm_delete.html', {'address': address})

