import datetime
import logging
import os

from django.utils.deprecation import MiddlewareMixin

logger = logging.getLogger(__name__)


class AuditTrail(MiddlewareMixin):

    @staticmethod
    def get_client_ip(request):
        if x_forwarded_for := request.META.get('HTTP_X_FORWARDED_FOR'):
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR', '')
        return ip

    @staticmethod
    def activity_log(request, client_ip):
        try:
            referer = request.META.get('HTTP_REFERER')
            username = request.user.username
            data = request.POST
            path = request.path
            now = datetime.datetime.now()
            current_month = now.month
            current_year = now.year
            filename = f'log_{current_month}_{current_year}.txt'
            write_path = './logs/activity_logs/' + filename
            body_msg = f'Timestamp: {now} | User Name : {username} | PID: {os.getpid()} | IP Address: {client_ip} | Referer : {referer} | path : {path} | data: {data}'
            if os.path.exists(write_path):
                mode = 'a+'
            else:
                mode = 'w'
            with open(write_path, mode) as f:
                f.write(body_msg + '\n')
        except Exception as e:
            logger.error(e)

    def process_request(self, request):
        if request.method == 'POST':
            self.activity_log(request, self.get_client_ip(request))
