from django.contrib import messages

from django.http import JsonResponse
from .models import Category, Product
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404

@login_required
def add_category_ajax(request):
    if request.method == 'POST':
        name = request.POST.get('name') or request.body and JSON.parse(request.body).name
        if name:
            category, created = Category.objects.get_or_create(name=name.strip())
            return JsonResponse({
                'success': True,
                'category_id': category.id,
                'category_name': category.name
            })
    return JsonResponse({'success': False, 'error': 'Invalid request'}, status=400)


def category_list(request):
    """Show all categories"""
    categories = Category.objects.all().order_by('name')
    return render(request, 'category/category_list.html', {'categories': categories})

def category_detail(request, slug):
    """Show products in a specific category"""
    category = get_object_or_404(Category, slug=slug)
    products = Product.objects.filter(category=category).order_by('-created_at')
    
    context = {
        'category': category,
        'products': products,
    }
    return render(request, 'category/category_detail.html', context)

def category_create(request):
    """Show products in a specific category"""
    if request.method == "POST":
        name = request.POST.get('name')
        if name:
            category, created = Category.objects.get_or_create(name=name.strip())
            if created:
                return render(request, 'category/category_list.html', {'categories': Category.objects.all().order_by('name')})
            else:
                messages.warning(request, 'Category already exists')
                return render(request, 'category/category_list.html', {'categories': Category.objects.all().order_by('name'),})
        
        messages.error(request, 'Invalid request: Name is required')
        return render(request, 'category/category_create.html', {}) 
    return render(request, 'category/category_create.html', {})
