from django.shortcuts import render, redirect, get_object_or_404
from apps.dashboard.utils import get_user_info
from apps.clientes.forms import ClientesForms ,EmpresasForms
from apps.clientes.models import ClientesModels, EmpresasModels
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

def cadastro_cliente(request):
    form = ClientesForms()

    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = ClientesForms(request.POST)
        if form.is_valid():
            # Obtenha o nome da espécie do formulário
            nome_completo = form.cleaned_data['nome_completo']
            # Verifique se a espécie com o mesmo nome já existe
            if ClientesModels.objects.filter(nome_completo=nome_completo).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:
                form.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_clientes')
    return render(request, 'clientes/cadastro_cliente.html', {"user_info": user_info, "form": form})




def cadastro_empresa(request):
    form = EmpresasForms()

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

    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = EmpresasForms(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 EmpresasModels.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
                nova_empresa = form.save(commit=False)
                # Adiciona a sequência ao nome_fantasia
                nova_empresa.nome_fantasia = f"{nome_fantasia}"
                # Salve a instância modificada no banco de dados
                nova_empresa.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_clientes')

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


def lista_clientes(request):
    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)
    dados_fisico = ClientesModels.objects.all()
    dados_juridico = EmpresasModels.objects.all()
    return render(request, 'clientes/lista_clientes.html', {"cards_fisico": dados_fisico,"cards_juridico": dados_juridico, "user_info": user_info})


def editar_cliente(request, cliente_id):
    cliente = get_object_or_404(ClientesModels, pk=cliente_id)

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

    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = ClientesForms(request.POST, request.FILES, instance=cliente)
        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_clientes')
    else:
        form = ClientesForms(instance=cliente)
    return render(request, 'clientes/editar_cliente.html', {"form": form, "user_info": user_info, 'cliente':cliente, "cliente_id": cliente_id })

def editar_juridico(request, juridico_id):
    juridico = get_object_or_404(EmpresasModels, pk=juridico_id)

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

    user_info = get_user_info(request.user.id)

    if request.method == 'POST':
        form = EmpresasForms(request.POST, request.FILES, instance=juridico)
        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_clientes')
    else:
        form = EmpresasForms(instance=juridico)
    return render(request, 'clientes/editar_juridico.html', {"form": form, "user_info": user_info, 'juridico':juridico, "juridico_id": juridico_id })



def deletar_cliente(request, cliente_id):
    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)
    try:
        cliente_fisico = ClientesModels.objects.get(id=cliente_id)
        cliente_fisico.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_clientes')
    except ObjectDoesNotExist:
       messages.error(request, 'Cliente não encontrado')
       return redirect('lista_clientes', { "user_info": user_info })
    
def deletar_juridico(request, juridico_id):
    if not request.user.is_authenticated:
        return redirect('index')
    user_info = get_user_info(request.user.id)
    try:
        cliente_juridico = EmpresasModels.objects.get(id=juridico_id)
        cliente_juridico.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_clientes')
    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_clientes', { "user_info": user_info })