from django.http import JsonResponse
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.db.models import Q
from .models import Supplier
from .forms import SupplierForm
@login_required(login_url='/auth/login/')
def supplier_list(request):
    query = request.GET.get('q', '')
    suppliers = Supplier.objects.all().order_by('name')

    if query:
        suppliers = suppliers.filter(
            Q(name__icontains=query) |
            Q(contact_person__icontains=query) |
            Q(phone__icontains=query) |
            Q(email__icontains=query)
        )

    add_supplier_form = SupplierForm()

    context = {
        'suppliers': suppliers,
        'query': query,
        'add_supplier_form': add_supplier_form,
    }

    return render(request, 'suppliers/supplier_list.html', context)

@login_required(login_url='/auth/login/')
def add_supplier(request):
    if request.method == 'POST':
        form = SupplierForm(request.POST)
        if form.is_valid():
            supplier = form.save()
            messages.success(request, f'Supplier "{supplier.name}" has been added successfully.')
            return redirect('supplier_list')
        else:
            messages.error(request, 'Please correct the errors below.')
    return redirect('supplier_list')


@login_required(login_url='/auth/login/')
def edit_supplier(request, supplier_id):
    supplier = get_object_or_404(Supplier, supplier_id=supplier_id)
    
    if request.method == 'POST':
        form = SupplierForm(request.POST, instance=supplier)
        if form.is_valid():
            form.save()
            messages.success(request, f'Supplier "{supplier.name}" has been updated successfully.')
            return redirect('supplier_list')
        else:
            messages.error(request, 'Please correct the errors below.')
            return redirect('supplier_list')
    else:
        form = SupplierForm(instance=supplier)

    # Check if request is AJAX (modern way)
    if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
        supplier_data = {
            'name': supplier.name,
            'contact_person': supplier.contact_person or '',
            'phone': supplier.phone or '',
            'email': supplier.email or '',
            'address': supplier.address or '',
            'city': supplier.city or '',
            'country': supplier.country or '',
            'notes': supplier.notes or '',
        }
        return JsonResponse(supplier_data)

    return render(request, 'suppliers/edit_supplier.html', {'form': form, 'supplier': supplier})


@login_required(login_url='/auth/login/')
def delete_supplier(request, supplier_id):
    supplier = get_object_or_404(Supplier, supplier_id=supplier_id)
    if request.method == 'POST':
        supplier_name = supplier.name
        supplier.delete()
        messages.success(request, f'Supplier "{supplier_name}" has been deleted successfully.')
        return redirect('supplier_list')
    return redirect('supplier_list')

@login_required(login_url='/auth/login/')
def view_supplier(request, supplier_id):
    supplier = get_object_or_404(Supplier, supplier_id=supplier_id)
    return render(request, 'suppliers/view_supplier.html', {'supplier': supplier})
