"""smash URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf import settings
from django.conf.urls import include
from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import logout
from django.views.defaults import page_not_found
from django.views.generic import TemplateView

from web import views

urlpatterns = [

    # make sure that users cannot disable two factors authentication

    url(
        r'^account/two_factor/disable/$',
        page_not_found,
        {'exception': Exception('Not Found')}
    ),

    ####################
    #   APPOINTMENTS   #
    ####################

    url(r'^appointments$', views.appointment.appointments, name='web.views.appointments'),
    url(r'^appointments/unfinished$', views.appointment.unfinished_appointments,
        name='web.views.unfinished_appointments'),
    url(r'^appointments/details/(?P<id>\d+)$', views.appointment.appointment_details,
        name='web.views.appointment_details'),
    url(r'^appointments/add/(?P<visit_id>\d+)$', views.appointment.appointment_add, name='web.views.appointment_add'),
    url(r'^appointments/add/general$', views.appointment.appointment_add, name='web.views.appointment_add_general'),
    url(r'^appointments/edit/(?P<id>\d+)$', views.appointment.appointment_edit, name='web.views.appointment_edit'),
    url(r'^appointments/delete/(?P<appointment_id>\d+)$', views.appointment.appointment_delete,
        name='web.views.appointment_delete'),

    ####################
    #      VISITS      #
    ####################

    url(r'^visits$', views.visit.visits, name='web.views.visits'),
    url(r'^visits/exceeded$', views.visit.exceeded_visits, name='web.views.exceeded_visits'),
    url(r'^visits/unfinished$', views.visit.unfinished_visits, name='web.views.unfinished_visits'),
    url(r'^visits/approaching$', views.visit.approaching_visits_without_appointments,
        name='web.views.approaching_visits_without_appointments'),
    url(r'^visits/approaching_post_mail$', views.visit.approaching_visits_for_mail_contact,
        name='web.views.approaching_visits_for_mail_contact'),
    url(r'^visits/missing_appointments$', views.visit.visits_with_missing_appointments,
        name='web.views.visits_with_missing_appointments'),
    url(r'^visits/details/(?P<id>\d+)$', views.visit.visit_details, name='web.views.visit_details'),
    url(r'^visits/add$', views.visit.visit_add, name='web.views.visit_add'),
    url(r'^visits/add/(?P<subject_id>\d+)$', views.visit.visit_add, name='web.views.visit_add'),
    url(r'^visit/mark/(?P<id>\d+)/(?P<as_what>[A-z]+)$', views.visit.visit_mark, name='web.views.visit_mark'),

    ####################
    #    SUBJECTS      #
    ####################

    url(r'^subjects$', views.subject.subjects, name='web.views.subjects'),
    url(r'^subjects/no_visit$', views.subject.subject_no_visits, name='web.views.subject_no_visits'),
    url(r'^subjects/require_contact$', views.subject.subject_require_contact, name='web.views.subject_require_contact'),
    url(r'^subjects/add$', views.subject.subject_add, name='web.views.subject_add'),
    url(r'^subjects/subject_visit_details/(?P<id>\d+)$', views.subject.subject_visit_details,
        name='web.views.subject_visit_details'),
    url(r'^subjects/edit/(?P<id>\d+)$', views.subject.subject_edit, name='web.views.subject_edit'),

    #########################
    # RED CAP NOTIFICATIONS #
    #########################

    url(r'^redcap/missing_subjects$', views.redcap.missing_subjects, name='web.views.missing_redcap_subject'),
    url(r'^redcap/inconsistent_subjects$', views.redcap.inconsistent_subjects,
        name='web.views.inconsistent_redcap_subject'),

    ####################
    #    CONTACTS      #
    ####################

    url(r'^subjects/(?P<subject_id>\d+)/contacts/add$', views.contact_attempt.contact_add,
        name='web.views.contact_add'),
    url(r'^subjects/(?P<subject_id>\d+)/contacts/(?P<contact_attempt_id>\d+)/edit', views.contact_attempt.contact_edit,
        name='web.views.contact_edit'),

    ####################
    #     DOCTORS      #
    ####################

    url(r'^doctors$', views.doctor.doctors, name='web.views.doctors'),
    url(r'^doctors/add$', views.doctor.doctor_add, name='web.views.doctor_add'),
    url(r'^doctors/edit/(?P<doctor_id>\d+)$', views.doctor.doctor_edit, name='web.views.doctor_edit'),
    url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.doctor.doctor_disable, name='web.views.doctor_disable'),
    url(r'^doctors/(?P<doctor_id>\d+)/availability/add$', views.doctor.doctor_availability_add,
        name='views.doctor.doctor_availability_add'),

    url(r'^doctors/availability/(?P<availability_id>\d+)/delete$', views.doctor.doctor_availability_delete,
        name='web.views.doctor_availability_delete'),
    url(r'^doctors/availability/(?P<availability_id>\d+)/edit', views.doctor.doctor_availability_edit,
        name='web.views.doctor_availability_edit'),

    url(r'^doctors/(?P<doctor_id>\d+)/holiday/add$', views.doctor.doctor_holiday_add,
        name='views.doctor.doctor_holiday_add'),

    url(r'^doctors/holiday/(?P<holiday_id>\d+)/delete$', views.doctor.doctor_holiday_delete,
        name='web.views.doctor_holiday_delete'),

    ####################
    #    EQUIPMENT     #
    ####################

    url(r'^equipment_and_rooms$', views.equipment.equipment_and_rooms, name='web.views.equipment_and_rooms'),
    url(r'^equipment_and_rooms/equipment_def$', views.equipment.equipment_def, name='web.views.equipment_def'),
    url(r'^equipment_and_rooms/kit_requests$', views.kit.kit_requests, name='web.views.kit_requests'),
    url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/$', views.kit.kit_requests_send_mail,
        name='web.views.kit_requests_send_mail'),
    url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/(?P<end_date>[\w-]+)/$',
        views.kit.kit_requests_send_mail, name='web.views.kit_requests_send_mail'),

    ####################
    #       MAIL       #
    ####################

    url(r'^mail_templates_old$', views.mails.mail_templates, name='web.views.mail_templates_old'),
    url(r'^mail_templates$', views.mails.MailTemplatesListView.as_view(), name='web.views.mail_templates'),
    url(r'^mail_templates/add$', views.mails.MailTemplatesCreateView.as_view(), name='web.views.mail_template_add'),
    url(r'^mail_templates/(?P<pk>\d+)/delete$', views.mails.MailTemplatesDeleteView.as_view(),
        name='web.views.mail_template_delete'),
    url(r'^mail_templates/(?P<pk>\d+)/edit$', views.mails.MailTemplatesEditView.as_view(),
        name='web.views.mail_template_edit'),
    url(r'^mail_templates/(?P<mail_template_id>\d+)/generate/(?P<instance_id>\d+)$', views.mails.generate,
        name="web.views.mail_template_generate"),

    ####################
    # DAILY PLANNING   #
    ####################


    url(r'^daily_planning$', login_required(TemplateView.as_view(template_name='daily_planning.html')),
        name='web.views.daily_planning'),

    ####################
    #     LANGUAGES    #
    ####################

    url(r'^languages$', views.language.LanguageListView.as_view(), name='web.views.languages'),
    url(r'^languages/add$', views.language.LanguageCreateView.as_view(), name='web.views.language_add'),
    url(r'^languages/(?P<pk>\d+)/delete$', views.language.LanguageDeleteView.as_view(),
        name='web.views.language_delete'),
    url(r'^languages/(?P<pk>\d+)/edit$', views.language.LanguageEditView.as_view(),
        name='web.views.language_edit'),

    ####################
    #    STATISTICS    #
    ####################

    url(r'^statistics$', views.statistics.statistics, name='web.views.statistics'),

    ####################
    #       EXPORT     #
    ####################

    url(r'^export$', views.export.export, name='web.views.export'),
    url(r'^export/csv/(?P<data_type>[A-z]+)$', views.export.export_to_csv, name='web.views.export_to_csv'),
    url(r'^export/xls/(?P<data_type>[A-z]+)$', views.export.export_to_excel, name='web.views.export_to_excel'),

    ####################
    #       CONFIGURATION     #
    ####################

    url(r'^configuration$', views.configuration_item.configuration_items, name='web.views.configuration'),

    ####################
    #       AUTH       #
    ####################

    # url(r'^login$', views.auth.login, name='web.views.login'),
    # url(r'^logout$', views.auth.logout, name='web.views.logout'),
    url(r'^logout$', logout, name='logout'),

    url(r'^$', views.index, name='web.views.index')
]

if settings.DEBUG:
    import debug_toolbar

    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]