from django.shortcuts import render
from apps.site_ama.models import VitrineMudas, BannerIndex, SustentabilidadeSection,CarrouselSectionIndex, NossosProjetosSection, NossaGenteSection, PropositosIndex, HistoriaIndex, ContatosIndex, Noticia
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect

def index(request):
    banners = BannerIndex.objects.filter(publicada=True)
    sustentabilidade = SustentabilidadeSection.objects.first()
    carrousels = CarrouselSectionIndex.objects.all()
    projetos = NossosProjetosSection.objects.first()
    nossa_gente = NossaGenteSection.objects.first()
    noticias = Noticia.objects.order_by('-data_publicacao')[:3]
    return render(request, 'site_ama/index.html', {'banners': banners, 'sustentabilidade': sustentabilidade, 'carrousels': carrousels, 'projetos': projetos, 'nossa_gente': nossa_gente, 'noticias': noticias})

def carrousel(request):
    carrousels = CarrouselSectionIndex.objects.all()[:10]  # Limite para 10 resultados
    return render(request, 'site_ama/index.html', {'carrousels': carrousels})

def vitrine(request):
    dados_vitrine = VitrineMudas.objects.filter(publicar=True).order_by('nome')
    
    # Número de itens por página
    items_por_pagina = 16
    paginator = Paginator(dados_vitrine, items_por_pagina)

    # Obtenha o número da página da solicitação GET, padrão para a página 1
    page = request.GET.get('page', 1)

    try:
        cards = paginator.page(page)
    except PageNotAnInteger:
        # Se a página não for um número inteiro, entregue a primeira página.
        cards = paginator.page(1)
    except EmptyPage:
        # Se a página está fora do intervalo (e.g. 9999), entregue a última página de resultados.
        cards = paginator.page(paginator.num_pages)

    return render(request, 'site_ama/vitrine.html', {'cards': cards})

def contato(request):
    contatos_edit = ContatosIndex.objects.first()
    return render(request, 'site_ama/contato.html', {'contatos_edit': contatos_edit})

def historia(request):
    historia_edit = HistoriaIndex.objects.all()

    left_block = []
    right_block = []
    add_to_left = True

    for historia_instance in historia_edit:  # Renomeie a variável para evitar conflito
        if add_to_left:
            left_block.append(historia_instance)
        else:
            right_block.append(historia_instance)
        add_to_left = not add_to_left

    context = {
        'left_block': left_block,
        'right_block': right_block,
    }
    return render(request, 'site_ama/historia.html', context)

def noticias(request):
    # Acessar informações da sessão
    detalhes_noticia = request.session.pop('detalhes_noticia', None)

    # Obter todas as notícias (ou as que você precisar) para a view 'noticias.html'
    noticias = Noticia.objects.all()

    return render(request, 'site_ama/noticias.html', {'noticias': noticias, 'detalhes_noticia': detalhes_noticia})

def proposito(request):
    proposito_edit = PropositosIndex.objects.first()
    return render(request, 'site_ama/proposito.html', {"proposito_edit": proposito_edit})

def buscar(request):
    dados_vitrine = VitrineMudas.objects.filter(publicar=True)

    if "buscar" in request.GET:
        nome_a_buscar = request.GET['buscar'].strip()
        if nome_a_buscar:
            dados_vitrine = dados_vitrine.filter(nome__icontains=nome_a_buscar)

    # Número de itens por página
    items_por_pagina = 4
    paginator = Paginator(dados_vitrine, items_por_pagina)

    # Obtenha o número da página da solicitação GET, padrão para a página 1
    page = request.GET.get('page', 1)

    try:
        cards = paginator.page(page)
    except PageNotAnInteger:
        # Se a página não for um número inteiro, entregue a primeira página.
        cards = paginator.page(1)
    except EmptyPage:
        # Se a página está fora do intervalo (e.g. 9999), entregue a última página de resultados.
        cards = paginator.page(paginator.num_pages)

    return render(request, 'site_ama/buscar.html', {"cards": cards})

    # Se você quiser redirecionar de volta à vitrine.html após a busca, você pode adicionar o seguinte:
    return redirect('vitrine')

def detalhes_noticias(request, noticia_id):
    noticia = get_object_or_404(Noticia, pk=noticia_id)

    # Armazenar informações na sessão
    request.session['detalhes_noticia'] = {
        'titulo': noticia.titulo,
        'imagem_url': noticia.imagem.url if noticia.imagem else None,
        'data_publicacao': noticia.data_publicacao.strftime('%d/%m/%Y %H:%M'),
        'conteudo': noticia.conteudo,
    }

    return render(request, 'site_ama/detalhes_noticias.html', {'noticia': noticia})

def manutencao(request):
    return render(request, 'site_ama/manutencao.html')

