from django.views.generic import CreateView
from django.urls import reverse_lazy
from django.contrib import messages
from django.core.mail import send_mail
from django.conf import settings
from .models import Message, ContactPage
from .forms import ContactForm

class ContactView(CreateView):
    model = Message
    form_class = ContactForm
    template_name = 'contact/contact.html'
    success_url = reverse_lazy('contact:index') # On recharge la page après envoi

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # On passe la config de la page (Titre, sous-titre...)
        context['page_config'] = ContactPage.objects.first()
        return context

    def form_valid(self, form):
        # 1. Sauvegarde en BDD (Automatique avec CreateView)
        response = super().form_valid(form)
        
        # 2. Récupération IP (Sécurité)
        self.object.ip_address = self.get_client_ip()
        self.object.save()

        # 3. Envoi d'Email de notification (à toi-même)
        # On utilise try/except pour ne pas planter le site si le serveur mail échoue
        try:
            subject = f"[Portfolio] Nouveau message de {self.object.name}"
            message_body = f"""
            Nouveau message reçu via le portfolio.
            
            Nom : {self.object.name}
            Email : {self.object.email}
            Sujet : {self.object.subject}
            
            Message :
            {self.object.content}
            """
            
            # Envoi réel (nécessite config SMTP dans settings.py, sinon console en dev)
            send_mail(
                subject,                        # Sujet
                message_body,                   # Contenu
                settings.DEFAULT_FROM_EMAIL,    # Expéditeur (Le site)
                [settings.ADMIN_EMAIL],         #  Destinataire (Mon Gmail)
                fail_silently=True,
            )
        except Exception as e:
            # En prod, on loggerait l'erreur
            pass

        # 4. Message Flash de succès pour l'utilisateur
        page_config = ContactPage.objects.first()
        success_text = page_config.success_message if page_config else "Message envoyé avec succès !"
        messages.success(self.request, success_text)

        return response

    def get_client_ip(self):
        x_forwarded_for = self.request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = self.request.META.get('REMOTE_ADDR')
        return ip