from django.shortcuts import render, get_object_or_404, redirect
from django.core.paginator import Paginator
from django.utils import timezone
from .models import *
from .forms import *
from django.core.mail import send_mail
from django.conf import settings
from django.core.mail import EmailMessage
from brinquedoteca_usuario.models import ConfiguracaoEmail

def base(request):
    categorias_menu = Categoria.objects.filter(categoria_tipo = 1).order_by("nome")
    conteudo_inicio = Conteudo.objects.filter(local = 1)
    conteudo_rodape = Conteudo.objects.filter(local = 2)

    context = { 
    	'categorias_menu':categorias_menu,
        'conteudo_inicio': conteudo_inicio,
        'conteudo_rodape': conteudo_rodape,
    }
    return context

# HOME
def home(request):
    return render(request, 'index.html', {'categoria': categoria})

def categoria_pai(request):
    categorias = Categoria.objects.filter(categoria_tipo = 1)
    return render(request, 'base.html', {'categorias': categorias})

def atividade_busca(request):
    atividades = Atividade.objects.all()
    # Representa qual o conjunto de atividades que vai ser filtradas na busca
    atividades_alvo_filtro = Atividade.objects.all()
    
    busca = request.GET.get('search') 
    filtros = request.GET.getlist('filtro')
    filtrosConcatenado = ""

    if filtros:
        for filtro in filtros:
            atividades = atividades.filter(categorias__nome__icontains=filtro)
            
            filtrosConcatenado += "&filtro=" + filtro

        atividades_alvo_filtro = atividades  


    if busca:
        # As queryset estão isoladas para manter a ordem de prioridade na busca
        
        # Procura por nomes iguais ao pesquisado
        atividades = atividades.filter(nome__istartswith=busca)
        # Adiciona nomes que contém a palavra pesquisada
        atividade_contem =  atividades_alvo_filtro.filter(nome__icontains=busca).difference(atividades)
        atividades = atividades.union(atividade_contem, all=True)  

        # pesquisa por intencionalidade pedagogica
        busca_avancada =  atividades_alvo_filtro.filter(intencionalidade_pedagogica__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)    
        # pesquisa por categorias
        busca_avancada =  atividades_alvo_filtro.filter(categorias__nome__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)    
        # pesquisa por cod BNCC  
        busca_avancada =  atividades_alvo_filtro.filter(cod_bncc__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)    
        # pesquisa por como brincar  
        busca_avancada =  atividades_alvo_filtro.filter(como_brincar__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)    
        # pesquisa por curiosidade  
        busca_avancada =  atividades_alvo_filtro.filter(curiosidades__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)
        # pesquisa por vídeos
        busca_avancada =  atividades_alvo_filtro.filter(videos__descricao__icontains=busca).difference(atividades)
        atividades = atividades.union(busca_avancada, all=True)        
                        
        # Adiciona ids ao final da pesquisa
        if busca.isnumeric():
            atividade_id =  atividades_alvo_filtro.filter(id=busca)
            atividades = atividades.union(atividade_id, all=True)


    paginator = Paginator(atividades, 15)
    page = request.GET.get('page')
    atividades = paginator.get_page(page)

    #categoria para a busca avançada
    categorias = Categoria.objects.all()

    

    return render(request, 'brinquedoteca_atividade/atividades/atividade_busca.html', {'busca': busca, 'atividades': atividades, 'categorias': categorias, 'filtrosEmString': filtrosConcatenado, 'filtros': filtros})

# ATIVIDADES
def atividade_categoria(request):
    categorias = Categoria.objects.filter()
    return render(request, 'brinquedoteca_atividade/atividades/atividade_categoria.html', {'categorias': categorias})

def atividade_lista(request, pk, slug):
    if slug != "None":
        categorias = Categoria.objects.filter(categoria_tipo = 0, slug=slug)
    else:
        categorias = Categoria.objects.filter(categoria_tipo = 0, pk=pk)
    atividades_lista = Atividade.objects.filter(categorias = pk)
    paginator = Paginator(atividades_lista, 8)
    page = request.GET.get('page')
    atividades = paginator.get_page(page)

    context = {
        'atividades': atividades,
        'categorias': categorias,
    }
    
    return render(request, 'brinquedoteca_atividade/atividades/atividade_lista.html', context)

def atividade_detalhe(request, pk, slug):
    if slug != "None":
        atividade = get_object_or_404(Atividade, slug=slug)
    else:
        atividade = get_object_or_404(Atividade, pk=pk)

    categoriaPlanejandoCantinho = Categoria.objects.filter(nome__icontains='Cantinho')
    categoriaAdolescencia = Categoria.objects.filter(nome__icontains='Adolescência')
    categoriaIdadeEscolar = Categoria.objects.filter(nome__icontains='Idade escolar')
    categoriaCrianças = Categoria.objects.filter(nome__icontains='Crianças')
    categoriaBebe = Categoria.objects.filter(nome__icontains='Bebês')
    categoriaIdadeAproximada = categoriaAdolescencia.union(categoriaIdadeEscolar, categoriaCrianças, categoriaBebe).order_by("nome")
    
    context = {
        'atividade': atividade,
        'categoriaPlanejandoCantinho': categoriaPlanejandoCantinho,
        'categoriaIdadeAproximada': categoriaIdadeAproximada,
    }
    #import pdb
    #pdb.set_trace()
    
    return render(request, 'brinquedoteca_atividade/atividades/atividade_detalhe.html', context)
    
# FACA VOCÊ MESMO
def faca_voce_mesmo(request):
    videos = Video.objects.all()
    return render(request, 'brinquedoteca_atividade/faca_voce.html', { 'videos': videos})

# SAIBA MAIS
def saiba_mais(request):
    listas_saiba = Saiba_Mais.objects.all()
    return render(request, 'brinquedoteca_atividade/saiba_mais/saiba_mais.html', {'listas_saiba': listas_saiba})

# DIRETRIZES
def diretrizes(request):
    listas_diretrizes = Diretrizes.objects.all().order_by('-ano_diretriz')
    return render(request, 'brinquedoteca_atividade/diretrizes/diretrizes.html', {'listas_diretrizes': listas_diretrizes})

# CATEGORIA
def categoria(request, pk, slug):
    if slug != "None":
        categoria_pai = get_object_or_404(Categoria, slug=slug)
    else:
        categoria_pai = get_object_or_404(Categoria, pk=pk)
    categorias = Categoria.objects.filter(categoria_pai=pk)
    return render(request, 'brinquedoteca_atividade/categoria/categoria.html', {'categorias': categorias,'categoria_pai': categoria_pai})

# ESTIMULANDO O DESENVOLVIMENTO
def estimulando_desenvolvimento(request):
    return render(request, 'brinquedoteca_atividade/estimulando_desenvolvimento.html', {})

# IDADE APROXIMADA
def idade_aproximada(request):
    return render(request, 'brinquedoteca_atividade/idade_aproximada.html', {})

# PLANEJANDO CANTINHOS
def planejando_cantinhos(request):
    return render(request, 'brinquedoteca_atividade/planejando_cantinhos.html', {})

# ATIVIDADES(PAGINA PRINCIPAL)
def atividades(request):
    return render(request, 'brinquedoteca_atividade/atividades.html', {})

#CONTATO
def contato(request):

    from django.core.mail.backends.smtp import EmailBackend

    try:
        config = ConfiguracaoEmail.objects.get(pk=1)
        email_backend = EmailBackend(host=config.host, port=config.port, username=config.username, password=config.password, use_tls=config.use_tls, fail_silently=True)
    except:
        return render(request, 'brinquedoteca_atividade/formulario.html', {'msg_form_enviado': msg_form_enviado})

    msg_form_enviado = None
    
    if request.POST:

        assunto = u"[Brinquedoteca Virtual] Contato pelo site"

        msg = "Contato realizado pelo site.<br><br>"
        msg += "<b>Nome:</b> %s<br><br>" % request.POST['nome']
        msg += "<b>E-mail:</b> %s<br><br>" % request.POST['email']
        msg += "<b>Telefone:</b> %s<br><br>" % request.POST['fone']
        msg += "<b>Mensagem:</b><br><br>%s<br><br>" % request.POST['msg']

        email_contato = [config.enviar_para]

        headers = {'Reply-To': request.POST["email"]}

        emailMsg = EmailMessage(assunto, msg, 'Contato Site <naoresponda.brinquedoteca@muz.ifsuldeminas.edu.br>', email_contato, headers=headers, connection=email_backend)

        emailMsg.content_subtype = "html"
        
        Email = emailMsg.send(fail_silently=True)

        msg_form_enviado = "Contato enviado com sucesso!"

    return render(request, 'brinquedoteca_atividade/formulario.html', {'msg_form_enviado': msg_form_enviado})

'''
def atividade_novo(request):
    if request.method == "POST":
        form = AtividadeForm(request.POST)
        if form.is_valid():
            atividade = form.save(commit=False)
            atividade.save()
        return redirect('atividade_detalhe', pk=atividade.pk)
    else:
        form = AtividadeForm()
    return render(request, 'brinquedoteca_atividade/atividades/atividades_editar.html', {'form': form})

def atividade_editar(request, pk):
    atividade = get_object_or_404(Atividade, pk=pk)
    if request.method == "POST":
        form = AtividadeForm(request.POST, instance=post)
        if form.is_valid():
            atividade = form.save(commit=False)
            atividade.save()
            return redirect('atividade_detalhe', pk=atividade.pk)
    else:
        form = AtividadeForm(instance=atividade)
    return render(request, 'brinquedoteca_atividade/atividades/atividades_editar.html', {'form': form})
'''