from django.http import HttpResponseServerError
from django.conf import settings
import traceback

class ErrorNotificationMiddleware:
    """Middleware per catturare errori del server e inviare notifiche email"""
    
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        return response

    def process_exception(self, request, exception):
        """Gestisce le eccezioni non catturate"""
        try:
            # Importa la funzione di notifica errori
            from .views import invia_notifica_errore
            
            # Determina il codice di errore
            codice_errore = "500"
            if hasattr(exception, 'status_code'):
                codice_errore = str(exception.status_code)

            # Ottieni il traceback completo per informazioni dettagliate
            traceback_info = traceback.format_exc()
            
            print(f"Codice errore: {codice_errore}")
            print(f"Traceback: {traceback_info}")
            
            # Invia notifica email con informazioni dettagliate
            invia_notifica_errore(request, exception, codice_errore, traceback_info)
            
        except Exception as e:
            # Se anche la notifica fallisce, logga l'errore
            print(f"Errore nel middleware di notifica: {e}")
            print(f"Traceback originale: {traceback.format_exc()}")
        
        # Restituisce una risposta di errore 500
        return HttpResponseServerError("Errore interno del server")


