import requests
from user_agents import parse

from .models import UserActivity

class UserActivityMiddleware:
    """ Middleware to record user activity."""

    def __init__(self, get_response):
        # Called only once when the web server starts
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        
        get_loc = requests.get(f"https://ipapi.co/{request.META.get('REMOTE_ADDR', None)}/json/").json()
        location = f"{get_loc.get('city')}, {get_loc.get('region')},{get_loc.get('country_name')}"
        
        ua_string = request.META.get('HTTP_USER_AGENT', None)
        agent = parse(ua_string)

        if request.user.is_authenticated:

            UserActivity.objects.create(
                user       = request.user,
                ip_address = request.META.get('REMOTE_ADDR', None),
                location   = location,
                action     = request.method,
                url        = request.path,
                user_agent = ua_string,
                device     = agent.device.family,
                os         = agent.os.family,
                browser    = agent.browser.family,
                status     = response.status_code
            )
        return response