# coding=utf-8
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from django.utils.decorators import method_decorator
from django.views.generic.base import ContextMixin

from notifications import get_notifications
from ..models import Worker

handler404 = 'web.views.e404_page_not_found'
handler500 = 'web.views.e500_error'
handler403 = 'web.views.e403_permission_denied'
handler400 = 'web.views.e400_bad_request'


def index(request):
    if request.user.is_authenticated():
        return redirect('web.views.appointments')
    return redirect(getattr(settings, "LOGIN_URL"))


def e404_page_not_found(request, context=None):
    return render(request, "errors/404.html", context, status=404)


def e500_error(request, context=None):
    return render(request, "errors/500.html", context, status=500)


def e403_permission_denied(request, context=None):
    return render(request, "errors/403.html", context, status=403)


def e400_bad_request(request, context=None):
    return render(request, "errors/400.html", context, status=400)


@login_required
def wrap_response(request, template, params):
    final_params = extend_context(params, request)
    return render(request, template, final_params)


def extend_context(params, request):
    person, role = Worker.get_details(request.user)
    notifications = get_notifications(request.user)
    final_params = params.copy()
    final_params.update({
        'person': person,
        'role': role,
        'notifications': notifications
    })
    return final_params


@method_decorator(login_required, name='dispatch')
class WrappedView(ContextMixin):
    def get_context_data(self, **kwargs):
        context = super(WrappedView, self).get_context_data(**kwargs)
        return extend_context(context, self.request)

    def dispatch(self, *args, **kwargs):
        return super(WrappedView, self).dispatch(*args, **kwargs)


import auth
import appointment
import visit
import doctor
import subject
import equipment
import kit
import mails
import statistics
import export
import contact_attempt
import configuration_item
import language
import voucher
import voucher_type
import voucher_type_price
import redcap
import uploaded_files