import datetime
import copy
from rest_framework.response import Response
from wikiazma import conf
from utils.utils import logs_adder


class MyResponse(Response):
    """
    This class extends from the django rest framework Response class and do exactly the same,
    but we also add logging to it. means while responsing, it also logs the desired content for us.
    """

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if len(conf.status_codes_for_logging) > 0 and self.status_code in conf.status_codes_for_logging:
            logged_response_data = copy.deepcopy(self.data)
            if 'data' in logged_response_data and 'token' in logged_response_data['data']:
                del logged_response_data['data']['token']
            logged_request_data = request.data
            if 'image' not in request.data:
                logged_request_data = copy.deepcopy(request.data)
                if 'password' in logged_request_data:
                    del logged_request_data['password']
                if 'g_id_token' in logged_request_data:
                    del logged_request_data['g_id_token']
                if 'fb_code' in logged_request_data:
                    del logged_request_data['fb_code']
            # if middleware.user:
            #     content = f'Event: API, {self.status_code}, {middleware.user.email}, {request.path}, {logged_request_data}, {logged_response_data}, {datetime.datetime.now()}'
            # else:
            #     content = f'Event: API, {self.status_code}, Null, {request.path}, {logged_request_data}, {logged_response_data}, {datetime.datetime.now()}'
            content = f'Event: API, {self.status_code}, Null, {request.path}, {logged_request_data}, {logged_response_data}, {datetime.datetime.now()}'
            logs_adder(content)
