from django.conf import settings

from .models import VisitorCounter


class VisitorCounterMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if self._should_track(request):
            VisitorCounter.increment_total()

        return self.get_response(request)

    def _should_track(self, request):
        if request.method != "GET":
            return False

        path = request.path or ""
        if path.startswith(settings.STATIC_URL) or path.startswith(settings.MEDIA_URL):
            return False

        accept_header = request.headers.get("Accept", "")
        if not accept_header:
            return True

        return "text/html" in accept_header or "*/*" in accept_header
