# middleware.py

from datetime import date
from .models import Traffic, ActiveVisitor


class TrafficMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

        # skip unnecessary paths
        if request.path.startswith('/admin') or request.path.startswith('/static'):
            return self.get_response(request)

        ip = self.get_client_ip(request)
        user_agent = request.META.get('HTTP_USER_AGENT', '')

        # Traffic tracking (existing code)
        already_exists = Traffic.objects.filter(
            ip_address=ip,
            date=date.today()
        ).exists()

        if not already_exists:
            Traffic.objects.create(
                ip_address=ip,
                user_agent=user_agent,
                date=date.today()
            )

        # Active visitor tracking (NEW)
        try:
            ActiveVisitor.objects.update_or_create(
                session_id=ip,
                defaults={
                    "ip_address": ip,
                    "user_agent": user_agent,
                }
            )
        except Exception:
            pass

        return self.get_response(request)

    def get_client_ip(self, request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

        if x_forwarded_for:
            return x_forwarded_for.split(',')[0]

        return request.META.get('REMOTE_ADDR')