from django.shortcuts import render, redirect, get_object_or_404
from apps.dashboard.utils import get_user_info
from apps.fornecedores.forms import FornecedoresForm, CategoriaForm
from apps.fornecedores.models import FornecedoresModels, Categoria
from django.contrib import messages
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.models import User
from django.utils.safestring import mark_safe
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
# Create your views here.


def cadastro_categoria(request):
    form = CategoriaForm()
    if request.method == 'POST':
        form = CategoriaForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, "Categoria criada com sucesso.")
            return redirect('cadastro_fornecedores')  # Redireciona para a página de fornecedores
    return render(request, 'fornecedores/cadastro_categoria.html', {'form': form})

@csrf_exempt
def cadastro_categoria_ajax(request):
    if request.method == 'POST':
        form = CategoriaForm(request.POST)
        if form.is_valid():
            form.save()
            return JsonResponse({"success": True, "message": "Categoria criada com sucesso!"})
        else:
            return JsonResponse({"success": False, "errors": form.errors})
    return JsonResponse({"success": False, "message": "Método inválido"})

def cadastro_fornecedores(request):
    form = FornecedoresForm()

    if not request.user.is_authenticated:
        return redirect('index')

    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = FornecedoresForm(request.POST)
        if form.is_valid():
            # Obtenha o nome fantasia do formulário
            nome_fantasia = form.cleaned_data['nome_fantasia']
            # Verifique se o cliente com o mesmo nome fantasia já existe
            if FornecedoresModels.objects.filter(nome_fantasia=nome_fantasia).exists():
                # Mensagem de erro
                messages.error(request, mark_safe(
                    '<i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> Cliente ja Cadastrado.'))
            else:
                # Crie uma instância do modelo com os dados do formulário
                novo_fornecedor = form.save(commit=False)
                # Adiciona a sequência ao nome_fantasia
                novo_fornecedor.nome_fantasia = f"{nome_fantasia}"
                # Salve a instância modificada no banco de dados
                novo_fornecedor.save()
                messages.success(request, mark_safe(
                    '<i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Novo Cliente cadastrado com êxito.'))
                return redirect('lista_fornecedores')

    return render(request, 'fornecedores/cadastro_fornecedores.html', {"user_info": user_info, "form": form})


def editar_fornecedores(request, fornecedor_id):
    fornecedor = get_object_or_404(FornecedoresModels, pk=fornecedor_id)

    if not request.user.is_authenticated:
        return redirect('index')

    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = FornecedoresForm(request.POST, request.FILES, instance=fornecedor)
        if form.is_valid():
            form.save()
            messages.success(request, mark_safe(
                    '<i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Cliente atualizado com êxito.'))
            return redirect('lista_fornecedores')
    else:
        form = FornecedoresForm(instance=fornecedor)
    return render(request, 'fornecedores/editar_fornecedor.html', {"form": form, "user_info": user_info, 'fornecedor':fornecedor, "fornecedor_id": fornecedor_id })

def lista_fornecedores(request):
    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)
    dados_fornecedores = FornecedoresModels.objects.all()
    return render(request, 'fornecedores/lista_fornecedores.html', {"cards_fornecedores": dados_fornecedores, "user_info": user_info})


def deletar_fornecedores(request, fornecedor_id):
    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)
    try:
        fornecedor = FornecedoresModels.objects.get(id=fornecedor_id)
        fornecedor.delete()
        messages.success(request, mark_safe(
                    '<i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Cliente deletado com êxito.'))
        return redirect ('lista_fornecedores')
    except ObjectDoesNotExist:
        messages.error(request, mark_safe(
                    '<i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> Cliente não encontrado.'))
        return redirect('lista_fornecedores', { "user_info": user_info })