from django.contrib import messages
from django.shortcuts import redirect, render
from django.utils import timezone

from qr_manager.models import Category


def create_category(request):
    if request.method == "POST":
        category_name = request.POST.get('category_name').upper()
        try:
            if Category.objects.filter(name=category_name, created_by__company=request.user.company,is_deleted=False).exists():
                messages.error(request, 'Category name should be unique.', extra_tags="danger")
                return redirect('/category')

            category = Category(
                name=category_name,
                created_by=request.user,
            )
            if "is_active" in request.POST:
                category.is_active = True
            else:
                category.is_active = False
            category.save()
            messages.success(request, 'Category created successfully!', extra_tags="success")
            return redirect('/category')
        except Exception as e:
            print(e)
            messages.error(request, 'Error creating category: ', extra_tags="danger")
            return redirect('/category')
    else:
        return render(request,'create_category.html')


def delete_category(request,category_to_delete):
    try:
        if Category.objects.get(pk=category_to_delete):
            if request.user.company == Category.objects.get(pk=category_to_delete).created_by.company:
                category = Category.objects.get(pk=category_to_delete)
                category.is_deleted = True
                category.is_active = False
                category.deleted_by = request.user
                category.deleted_date = timezone.now()
                category.save()
                messages.success(request, 'Category deleted successfully!', extra_tags="success")
                return redirect('/category')

            else:
                messages.error(request, 'You are not authorized to delete this category.', extra_tags="danger")
                return redirect('/category')

        else:
            messages.error(request, 'Category not found.', extra_tags="danger")
            return redirect('/category')

    except Exception as e:
        print(e)
        messages.error(request, 'Error deleting category: ', extra_tags="danger")
        return redirect('/category')



def edit_category(request, category_id):
    if request.method == "POST":
        try:
            if Category.objects.get(pk=category_id):
                if request.user.company == Category.objects.get(pk=category_id).created_by.company:
                    category = Category.objects.get(pk=category_id)
                    print(request.POST)
                    if "is_active" in request.POST:
                        is_active = request.POST.get('is_active')
                        print(is_active, "is_active")
                        try:
                            is_active = True if is_active == "on" else False
                            category.is_active = is_active
                        except:
                            pass
                    else:
                        category.is_active = False

                    if 'category_name' in request.POST:

                        category_name = request.POST.get('category_name')
                        print(category_name, "category_name")
                        category.name = category_name
                    category.save()

                    messages.success(request, 'Category updated successfully!', extra_tags="success")
                    return redirect('/category')

                else:
                    messages.error(request, 'You are not authorized to delete this category.', extra_tags="danger")
                    return redirect('/category')

            else:
                messages.error(request, 'Category not found.', extra_tags="danger")
                return redirect('/category')

        except Exception as e:
            print(e)
            messages.error(request, 'Error deleting category: ', extra_tags="danger")
            return redirect('/category')
    else:
        if not Category.objects.get(pk=category_id):
            messages.error(request, 'Category not found.', extra_tags="danger")
            return redirect('/category')
        category_details = Category.objects.get(pk=category_id)
        return render(request, 'edit_category.html', context={'category': category_details})
