from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponseRedirect, JsonResponse
from django.contrib import messages
from django.urls import reverse
from django.template.response import TemplateResponse
from django.utils.text import slugify

from wagtail.models import Page
from wagtail.admin import messages as wagtail_messages

from .models import BlogPostPage, BlogCategory, BlogPageCategory




def add_blog_category(request):
    """
    Admin view to add a new blog category
    """
    if request.method == 'POST':
        name = request.POST.get('name')
        if name:
            # Create slug from name
            slug = slugify(name)
            
            # Check if category with this slug already exists
            if BlogCategory.objects.filter(slug=slug).exists():
                wagtail_messages.error(request, f'A category with the name "{name}" already exists.')
                return redirect('wagtailadmin_home')
            
            # Create the category
            category = BlogCategory(name=name, slug=slug)
            category.save()
            
            wagtail_messages.success(request, f'Category "{name}" has been created.')
            return redirect('wagtailadmin_home')
    
    return TemplateResponse(request, 'blogs/admin/add_category.html', {})


def list_blog_categories(request):
    """
    Admin view to list all blog categories
    """
    categories = BlogCategory.objects.all().order_by('name')
    return TemplateResponse(request, 'blogs/admin/list_categories.html', {
        'categories': categories,
    })


def delete_blog_category(request, category_id):
    """
    Admin view to delete a blog category
    """
    category = get_object_or_404(BlogCategory, id=category_id)
    
    if request.method == 'POST':
        name = category.name
        category.delete()
        wagtail_messages.success(request, f'Category "{name}" has been deleted.')
        return redirect('list_blog_categories')
    
    return TemplateResponse(request, 'blogs/admin/delete_category.html', {
        'category': category,
    })


