import datetime
import json
import logging

from django.http import HttpResponse

from track.utils import DateTimeJSONEncoder


perflog = logging.getLogger("perflog")


def _get_request_header(request, header_name, default=''):
    """Helper method to get header values from a request's META dict, if present."""
    if request is not None and hasattr(request, 'META') and header_name in request.META:
        return request.META[header_name]
    else:
        return default


def _get_request_value(request, value_name, default=''):
    """Helper method to get header values from a request's GET or POST dicts, if present."""
    if request is not None and hasattr(request, 'GET') and value_name in request.GET:
        return request.GET[value_name]
    elif request is not None and hasattr(request, 'POST') and value_name in request.POST:
        return request.POST[value_name]
    else:
        return default


def performance_log(request):
    """
    Log when POST call to "performance" URL is made by a user.
    Request should provide "event" and "page" arguments.
    """

    event = {
        "ip": _get_request_header(request, 'REMOTE_ADDR'),
        "referer": _get_request_header(request, 'HTTP_REFERER'),
        "accept_language": _get_request_header(request, 'HTTP_ACCEPT_LANGUAGE'),
        "event_source": "browser",
        "event": _get_request_value(request, 'event'),
        "agent": _get_request_header(request, 'HTTP_USER_AGENT'),
        "page": _get_request_value(request, 'page'),
        "id": _get_request_value(request, 'id'),
        "expgroup": _get_request_value(request, 'expgroup'),
        "value": _get_request_value(request, 'value'),
        "time": datetime.datetime.utcnow(),
        "host": _get_request_header(request, 'SERVER_NAME'),
    }

    perflog.info(json.dumps(event, cls=DateTimeJSONEncoder))

    return HttpResponse(status=204)
