import logging

import pytz
from django.conf import settings
from django.utils import timezone

from license_info.tools import get_license_info
from users.services.userinfo import UserStatusService
from license_info.exeptions import LicenseException

_log = logging.getLogger(__name__)


class TimezoneMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated:
            timezone_name = getattr(getattr(request.user, 'userinfo', None), 'timezone', None)
            timezone_name = timezone_name or getattr(settings, 'DEFAULT_CURRENT_TIMEZONE', None) or 'UTC'
            timezone.activate(pytz.timezone(timezone_name))
            service = UserStatusService(request.user)
            service.set_status()
        else:
            timezone.deactivate()

        response = self.get_response(request)
        timezone.deactivate()
        return response


class LicenseMiddleware:
    """Check if user activate license"""

    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Get license
        info = None
        try:
            info = get_license_info()
        except LicenseException:
            _log.error("Can't get license information")

        # Append it to request
        request.license = info

        # Return request
        response = self.get_response(request)

        # # Allow only license urls
        # # Don't use reverse here, because we need several URL's to allow
        # if info is None and "license" not in request.path:
        #     return LicenseInfoAPIView.as_view(request)

        return response
