from django.shortcuts import render, redirect
from django.views.generic import ListView, DetailView
from django.db import connection
from django.contrib.auth.decorators import login_required
from .models import Reuniao
from reuniao.forms import ReuniaoForm

# Listar todas as reuniões
class ReuniaoListView(ListView):
    model = Reuniao
    template_name = 'reuniao/listar_reunioes.html'
    context_object_name = 'reunioes'

    def get_queryset(self):
        # Define o schema do tenant atual
        if self.request.user.is_authenticated and self.request.user.tenant:
            connection.set_schema(self.request.user.tenant.schema_name)
        return super().get_queryset()

# Detalhes de uma reunião
class ReuniaoDetailView(DetailView):
    model = Reuniao
    template_name = 'reuniao/detalhes_reuniao.html'
    context_object_name = 'reuniao'

    def get_queryset(self):
        # Define o schema do tenant atual
        if self.request.user.is_authenticated and self.request.user.tenant:
            connection.set_schema(self.request.user.tenant.schema_name)
        return super().get_queryset()

# Agendar uma nova reunião

# views.py

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.db import connection
from datetime import timedelta
from django.utils.dateparse import parse_datetime

from .models import Reuniao
from .forms import ReuniaoForm
from .teams_auth import criar_reuniao_no_teams

ORGANIZER_EMAIL = "fabiano.alves@grfgraph.com.br"
ORGANIZER_ID = "fc126174-2892-4101-bc09-3239cd37c01a"

@login_required
def agendar_reuniao(request):
    if request.method == 'POST':
        form = ReuniaoForm(request.POST)
        print("DEBUG: POST DATA =", request.POST)
        if form.is_valid():
            reuniao = form.save(commit=False)
            reuniao.criado_por = request.user

            # ⚠️ Garante que está no schema certo
            if request.user.is_authenticated and hasattr(request.user, 'tenant'):
                connection.set_schema(request.user.tenant.schema_name)

            # Debug do campo data_hora
            print("DEBUG: Antes de salvar no model, reuniao.data_hora =", reuniao.data_hora, type(reuniao.data_hora))

            # Se por algum motivo vier como string, forçamos converter
            if isinstance(reuniao.data_hora, str):
                print("DEBUG: data_hora veio como string =>", reuniao.data_hora)
                reuniao.data_hora = parse_datetime(reuniao.data_hora)
                print("DEBUG: data_hora convertido =>", reuniao.data_hora, type(reuniao.data_hora))

            # --------------- Lógica para criar reunião no Teams ---------------
            if request.user.email == ORGANIZER_EMAIL:
                try:
                    # Passa data_hora como datetime e o organizer_id fixo
                    reuniao.link_teams = criar_reuniao_no_teams(
                        reuniao.titulo,
                        reuniao.data_hora,
                        ORGANIZER_ID
                    )
                except Exception as e:
                    reuniao.link_teams = None  
                    print(f"❌ Erro ao gerar link do Teams: {e}")
            else:
                print(f"⚠️ O usuário {request.user.email} não pode criar reuniões. Apenas {ORGANIZER_EMAIL} pode criar.")

            # --------------- Fim lógica de criação ---------------

            reuniao.save()
            reuniao.enviar_convite()
            return redirect('listar_reunioes')
        else:
            print("DEBUG: Form inválido =>", form.errors)
    else:
        form = ReuniaoForm()

    return render(request, 'reuniao/agendar_reuniao.html', {'form': form})











# Calendário de reuniões
from django.shortcuts import render
from .models import Reuniao
from django.db import connection
from django.contrib.auth.decorators import login_required

@login_required
def calendario(request):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)

    # Busca todas as reuniões
    reunioes = Reuniao.objects.all()

    # Formata as reuniões para o FullCalendar
    eventos = []
    for reuniao in reunioes:
        eventos.append({
            'title': reuniao.titulo,
            'start': reuniao.data_hora.isoformat(),
            'url': reuniao.link_teams,
            'participantes': reuniao.participantes,
            'resumo': reuniao.resumo,
        })

    return render(request, 'reuniao/calendario.html', {'eventos': eventos})

from django.shortcuts import get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .models import Reuniao
from django.db import connection

@login_required
def deletar_reuniao(request, pk):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)
    
    reuniao = get_object_or_404(Reuniao, id=pk)
    
    if request.method == 'POST':
        reuniao.delete()
        return redirect('listar_reunioes')
    
    return render(request, 'reuniao/deletar_reuniao.html', {'reuniao': reuniao})


from django.shortcuts import render, get_object_or_404, redirect
from django.http import JsonResponse
from django.views.decorators.http import require_POST
from django.contrib.auth.decorators import login_required
from django.db import connection
from .models import Reuniao
from .forms import ReuniaoForm, AtaForm

from django.http import JsonResponse

@login_required
def editar_ata(request, pk):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)
    
    reuniao = get_object_or_404(Reuniao, id=pk)
    
    if request.method == 'POST':
        form = AtaForm(request.POST, instance=reuniao)
        if form.is_valid():
            form.save()
            return JsonResponse({'success': True})
        return JsonResponse({'success': False, 'errors': form.errors})
    
    form = AtaForm(instance=reuniao)
    return render(request, 'reuniao/editar_ata.html', {
        'form': form,
        'reuniao': reuniao
    })


@require_POST
@login_required
def arquivar_ata(request, pk):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)
    
    reuniao = get_object_or_404(Reuniao, id=pk)
    
    if not reuniao.arquivada:
        reuniao.arquivada = True
        reuniao.save()
        return JsonResponse({'success': True})
    return JsonResponse({'success': False, 'error': 'Ata já arquivada'})

@login_required
def buscar_atas(request):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)
    
    data = request.GET.get('data')
    if not data:
        return render(request, 'reuniao/buscar_atas.html', {'error': 'Data não fornecida'})
    
    try:
        atas = Reuniao.objects.filter(
            data_hora__date=data,
            arquivada=True
        ).order_by('data_hora')
        
        return render(request, 'reuniao/buscar_atas.html', {
            'atas': atas,
            'data_pesquisa': data
        })
    except Exception as e:
        return render(request, 'reuniao/buscar_atas.html', {
            'error': f'Erro na busca: {str(e)}'
        })

from django.shortcuts import render
from django.http import JsonResponse
from django.core.files.storage import FileSystemStorage
from django.contrib.auth.decorators import login_required
from django.db import connection

from django.core.files.storage import FileSystemStorage
from django.http import JsonResponse

@login_required
def upload_file(request):
    if request.user.is_authenticated and request.user.tenant:
        connection.set_schema(request.user.tenant.schema_name)
    
    if request.method == 'POST':
        if 'file' not in request.FILES:
            return JsonResponse({'error': 'Nenhum arquivo encontrado.'}, status=400)

        uploaded_file = request.FILES['file']
        fs = FileSystemStorage()
        filename = fs.save(uploaded_file.name, uploaded_file)
        file_url = fs.url(filename)
        return JsonResponse({'file_url': file_url})

    return JsonResponse({'error': 'Método inválido.'}, status=405)

from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.conf import settings
from django.db import connection
import re

from django.core.mail import EmailMultiAlternatives

def enviar_convite(self):
    if hasattr(self, 'criado_por') and hasattr(self.criado_por, 'tenant'):
        tenant_schema = self.criado_por.tenant.schema_name
        connection.set_schema(tenant_schema)
    else:
        print("❌ Erro: Tenant não encontrado para esta reunião.")
        return

    subject = f"Convite para Reunião: {self.titulo}"
    emails = re.split(r'[;,]\s*', self.participantes)
    recipient_list = [email.strip() for email in emails if email.strip()]
    if not recipient_list:
        print("❌ Nenhum destinatário válido para envio do convite.")
        return

    message = (
        f"Você foi convidado para a reunião: {self.titulo}\n\n"
        f"📅 Data e Hora: {self.data_hora.strftime('%d/%m/%Y %H:%M')}\n"
        f"🔗 Link do Teams: {self.link_teams}\n\n"
        f"📝 Resumo: {self.resumo}\n"
        f"👥 Participantes: {', '.join(recipient_list)}"
    )

    html_message = render_to_string('reuniao/email_convite.html', {
        'reuniao': self
    })

    try:
        msg = EmailMultiAlternatives(subject, message, settings.DEFAULT_FROM_EMAIL, recipient_list)
        msg.attach_alternative(html_message, "text/html")
        msg.send()
        print(f"✅ Convite enviado com sucesso para {', '.join(recipient_list)} (Schema: {tenant_schema})")
    except Exception as e:
        print(f"❌ Erro ao enviar convite: {e}")


