from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.db import connection
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.contrib import messages
from django.conf import settings
from django.contrib.auth import get_user_model
from .forms import MoradorForm
from .models import Morador
import secrets
import string
from django.utils.timezone import now
from django.contrib.auth.models import Group  # Adicione isso ao topo do arquivo

def gerar_usuario_unico(email, tenant):
    User = get_user_model()
    base_username = email.split('@')[0].lower()
    username = base_username
    contador = 1
    while User.objects.filter(username=username, tenant=tenant).exists():
        username = f"{base_username}{contador}"
        contador += 1
    return username

def gerar_senha_segura(tamanho=10):
    caracteres = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(caracteres) for _ in range(tamanho))

@login_required
def cadastrar_morador(request):
    if not hasattr(request.user, 'tenant') or not request.user.tenant:
        return redirect('painel:dashboard')

    connection.set_schema(request.user.tenant.schema_name)

    if request.method == 'POST':
        form = MoradorForm(request.POST, tenant=request.user.tenant)
        if form.is_valid():
            data = form.cleaned_data
            User = get_user_model()

            username = gerar_usuario_unico(data['email'], request.user.tenant)
            senha = gerar_senha_segura()

            user = User.objects.create_user(
                username=username,
                email=data['email'],
                password=senha,
                first_name=data['nome_completo'],
            )
            user.tenant = request.user.tenant
            user.save()

            # ✅ Adiciona ao grupo 'morador'
            try:
                grupo_morador = Group.objects.get(name='morador')
                user.groups.add(grupo_morador)
            except Group.DoesNotExist:
                messages.warning(request, "⚠️ Grupo 'morador' não existe. O usuário foi criado, mas não foi atribuído ao grupo.")

            morador = form.save(commit=False)
            morador.user = user
            morador.save()

            # Envia e-mail de boas-vindas
            context = {
                'nome': morador.nome_completo,
                'usuario': user.username,
                'senha': senha,
                'url_login': 'https://sindico.grfgraph.com.br/login/',
                'logo_url': 'https://sindico.grfgraph.com.br/static/relatorio/grf_graph_logo.png',
                'now': now()
            }
            html = render_to_string('email/boas_vindas_morador.html', context)
            text = strip_tags(html)
            email_msg = EmailMultiAlternatives(
                subject='Seus dados de acesso - GRFGraph',
                body=text,
                from_email=settings.DEFAULT_FROM_EMAIL,
                to=[data['email']],
            )
            email_msg.attach_alternative(html, "text/html")
            email_msg.send()

            messages.success(request, f"✅ Morador {morador.nome_completo} cadastrado com sucesso e e-mail enviado.")
            return redirect('painel:dashboard')
    else:
        form = MoradorForm(tenant=request.user.tenant)

    return render(request, 'moradores/cadastrar_morador.html', {'form': form})


from django.http import HttpResponse

@login_required
def cadastrar_morador_success(request):
    return HttpResponse("✅ Morador cadastrado com sucesso!")

from django.template.loader import render_to_string
from django.utils.timezone import now
from django.http import HttpResponse

@login_required
def preview_email_morador(request):
    contexto = {
        'nome': 'Exemplo da Silva',
        'usuario': 'exemplo123',
        'senha': 'senha12345',
        'url_login': 'https://sindico.grfgraph.com.br/login/',
        'logo_url': 'https://sindico.grfgraph.com.br/static/relatorio/grf_graph_logo.png',
        'now': now()
    }

    html = render_to_string('email/boas_vindas_morador.html', contexto)
    return HttpResponse(html)
