from datetime import timedelta
import traceback
from django.utils import timezone
from django.utils.deprecation import MiddlewareMixin
from .models import SystemLog

class ErrorAndLogCleanupMiddleware(MiddlewareMixin):
    """ثبت خطاهای غیرمنتظره و پاکسازی تنبل هنگام ورود مدیر، بدون Cron.

    حذف ۷روزه فقط در نخستین درخواست مدیر در هر روز اجرا می‌شود؛
    در نبود ترافیک مدیر، زمان حذف عقب می‌افتد.
    """
    def process_request(self,request):
        if not request.user.is_authenticated:return
        is_admin=request.user.is_superuser
        if not is_admin:
            try:is_admin=request.user.samshaf_profile.role=='admin'
            except Exception:is_admin=False
        if not is_admin:return
        today=timezone.localdate().isoformat()
        if request.session.get('samshaf_log_cleanup_date')==today:return
        try:
            SystemLog.objects.filter(created_at__lt=timezone.now()-timedelta(days=7)).delete()
            request.session['samshaf_log_cleanup_date']=today
        except Exception:
            pass  # اگر پیش از migrate پایگاه‌داده آماده نبود

    def process_exception(self,request,exception):
        try:
            SystemLog.objects.create(level='ERROR',event=exception.__class__.__name__[:80],
                message=str(exception)[:2500]+'\n'+traceback.format_exc()[-3500:],
                actor=request.user if request.user.is_authenticated else None,
                path=request.path[:240])
        except Exception:pass
        return None  # Django پاسخ 500 امن ایجاد می‌کند

    def process_response(self,request,response):
        # پاسخ‌های خصوصی با CDN یا مرورگر مشترک کش عمومی نشوند.
        if getattr(request,'user',None) and request.user.is_authenticated:
            response['Cache-Control']='private, no-store, max-age=0'
            response['Pragma']='no-cache'
        return response
