from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib.auth.decorators import permission_required
from django.contrib import admin as django_admin

from django.views.generic import TemplateView, RedirectView

from rest_framework import routers

from .accounts.views import (ProfileEditView, ProfileView,
                            TimtecUserAdminViewSet,
                            AcceptTermsView, )

from .core.views import (CourseView, GenericCourseView,
                        CourseProfessorViewSet, EnrollCourseView, HomeView,
                        UserCoursesView, ContactView, LessonDetailView,
                        LessonViewSet, SimpleLessonViewSet, StudentProgressViewSet,
                        UserNotesViewSet, CoursesView, CourseThumbViewSet, LessonThumbViewSet,
                        CourseStudentViewSet, CarouselCourseView, DashboardView,
                        ClassListView, ClassCreateView, ClassUpdateView, ClassDeleteView,
                        ClassRemoveUserView, ClassAddUsersView,
                        ClassEvaluationsView, ClassActivityViewSet,
                        FlatpageViewSet, CoursePictureUploadViewSet,
                        ResumeCourseView, FlatpageView, CourseAuthorViewSet,
                        UnitViewSet,
                        EvaluationViewSet,
                        RequestCertificateView,
                        EmitReceiptView, ProfileViewSet, )

from .activities.views import AnswerViewSet, ActivityImageViewSet, SlidesRevealView
from .course_material.views import CourseMaterialView, FileUploadView
from .notes.views import NotesViewSet, CourseNotesView, UserNotesView
from .reports.views import (UserCourseStats, CourseStatsByLessonViewSet, UserCourseLessonsStats, GeneralReportsView, )

from courses.views import (
    CourseViewSet, BaseCourseProfessorViewSet,
    ProfessorMessageViewSet, ProfessorGlobalMessageViewSet,
    ProfessorMessageReadViewSet, CourseGroupViewSet
)
from courses.course_material.views import CourseMaterialViewSet, CourseMaterialFileViewSet
from courses.certification.views import (
    CertificationProcessViewSet,
    CourseCertificationViewSet,
    CertificateTemplateViewSet,
    CertificateTemplateImageViewSet,
    CourseCertificationDetailView,
)
from courses.workspaces.views import (
    WorkspaceViewSet,
    WorkspaceGroupViewSet,
    WorkspaceGroupAdminViewSet,
)
from courses.classes.views import BasicClassViewSet, ClassViewSet
from courses.reports.views import (
    SummaryViewSet,
    UsersByGroupViewSet,
    UsersByClassViewSet,
)
from baquara.users.views import SearchUserViewSet, GroupViewSet, GroupAdminViewSet

app_name = 'courses_legacy'

django_admin.autodiscover()

router = routers.DefaultRouter(trailing_slash=False)

router.register(r'profile', ProfileViewSet, base_name='profile')
router.register(r'user_admin', TimtecUserAdminViewSet, base_name='user_admin')
router.register(r'course_group', CourseGroupViewSet, base_name='course_group')

router.register(r'course_carousel', CarouselCourseView, base_name='course_carousel')
router.register(r'course_professor', CourseProfessorViewSet, base_name='course_professor')
router.register(r'course_professor_picture', CoursePictureUploadViewSet, base_name='course_professor_picture')
router.register(r'course_author', CourseAuthorViewSet, base_name='course_author')
router.register(r'course_student', CourseStudentViewSet, base_name='course_student')

# Professor Message
router.register(r'professor_message', ProfessorMessageViewSet, base_name='professor_message')
router.register(r'professor_message_global', ProfessorGlobalMessageViewSet, base_name='professor_message_global')
router.register(r'professor_message_read', ProfessorMessageReadViewSet, base_name='professor_message_read')

router.register(r'coursethumbs', CourseThumbViewSet, base_name='coursethumbs')
router.register(r'lessonthumbs', LessonThumbViewSet, base_name='lessonthumbs')
router.register(r'lessons', LessonViewSet, base_name='lessons')
router.register(r'simple_lessons', SimpleLessonViewSet, base_name='simple_lessons')
router.register(r'unit', UnitViewSet, base_name='unit')
router.register(r'answer', AnswerViewSet, base_name='answer')
router.register(r'activity_image', ActivityImageViewSet, base_name='activity_image')
router.register(r'student_progress', StudentProgressViewSet, base_name='student_progress')

router.register(r'note', NotesViewSet, base_name='note')
router.register(r'user_notes', UserNotesViewSet, base_name='user_notes')
router.register(r'reports', UserCourseStats, base_name='reports')

router.register(r'lessons_user_progress', UserCourseLessonsStats, base_name='lessons_user_progress')
router.register(r'course_stats', CourseStatsByLessonViewSet, base_name='course_stats')
router.register(r'course_classes', ClassViewSet, base_name='course_classes')
router.register(r'course_classes_basic', BasicClassViewSet, base_name='course_classes_basic')
router.register(r'course_class_activities', ClassActivityViewSet, base_name='course_class_activities')
router.register(r'flatpage', FlatpageViewSet, base_name='flatpage')

router.register(r'evaluation', EvaluationViewSet, base_name='evaluation')


# Views migradas, mantidas por compatibilidade com angularjs
router.register(r'course', CourseViewSet, base_name='course')
router.register(r'course_material', CourseMaterialViewSet, base_name='course_material')
router.register(r'course_material_file', CourseMaterialFileViewSet, base_name='course_material_file')
router.register(r'course_professor_basic', BaseCourseProfessorViewSet, base_name='course_professor')

router.register(r'user', SearchUserViewSet, base_name='user')
router.register(r'user_search', SearchUserViewSet, base_name='user_search')
router.register(r'student_search', SearchUserViewSet, base_name='student_search')
router.register(r'group', GroupViewSet, base_name='group')
router.register(r'group_admin', GroupAdminViewSet, base_name='group_admin')

router.register(r'course_certification', CourseCertificationViewSet, base_name='course_certification')
router.register(r'certification_process', CertificationProcessViewSet, base_name='certification_process')
router.register(r'certificate_template', CertificateTemplateViewSet, base_name='certificate_template')

# Workspaces (Contracts) compat
router.register(r'contract', WorkspaceViewSet)
router.register(r'group', WorkspaceGroupViewSet, base_name='group')
router.register(r'group_admin', WorkspaceGroupAdminViewSet, base_name='group_admin')
router.register(r'class', ClassViewSet)

# General Reports
router.register(r'summary', SummaryViewSet, base_name='summary')
router.register(r'users-by-group', UsersByGroupViewSet, base_name='users-by-group')
router.register(r'users-by-class', UsersByClassViewSet, base_name='users-by-class')

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home_view'),
    url(r'^courses', CoursesView.as_view(), name='courses'),

    # Privileged browsing
    url(r'^admin/', include('courses_legacy.administration.urls')),
    url(r'^reports/', include('courses_legacy.reports.urls')),

    # Public browsing
    url(r'^my-courses/$', UserCoursesView.as_view(), name='user_courses'),

    url(r'^emit_recipt/(?P<course_id>[-a-zA-Z0-9_]+)$', EmitReceiptView.as_view(), name='emit_recipt'),
    url(r'^request_certificate/(?P<course_id>[-a-zA-Z0-9_]+)$',
        RequestCertificateView.as_view(),
        name='request_certificate'),

    # Certificate
    url(r'^certificate/(?P<slug>[-a-zA-Z0-9_]+)/$', CourseCertificationDetailView.as_view(), name='certificate'),
    url(r'^certificate/(?P<slug>[-a-zA-Z0-9_]+)/print/$',
        CourseCertificationDetailView.as_view(template_name="certificate_print.html"),
        name='certificate-print',
    ),

    url(r'^certificates-list.html$', TemplateView.as_view(template_name="administration/certificates-list.html")),

    url(r'^admin/contracts$', TemplateView.as_view(template_name="contracts.html"), name="contracts"),
    url(r'^contract-edit.html$', TemplateView.as_view(template_name="contract-edit.html")),
    url(r'^contract-detail.html$', TemplateView.as_view(template_name="contract-detail.html")),
    url(r'^contracts-list.html$', TemplateView.as_view(template_name="contracts-list.html")),

    url(r'^accept_terms/$', AcceptTermsView.as_view(), name='accept_terms'),
    url(r'^course/(?P<slug>[-a-zA-Z0-9_]+)/intro/$', CourseView.as_view(), name='course_intro'),
    url(r'^course/(?P<slug>[-a-zA-Z0-9_]+)/enroll/$', EnrollCourseView.as_view(), name='enroll_course'),
    url(r'^course/(?P<slug>[-a-zA-Z0-9_]+)/resume/$', ResumeCourseView.as_view(), name='resume_course'),
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/lesson/(?P<slug>[-a-zA-Z0-9_]+)/$', LessonDetailView.as_view(), name='lesson'),
    url(r'^html5/', TemplateView.as_view(template_name="html5.html")),
    url(r'^empty/', TemplateView.as_view(template_name="empty.html")),

    # Classes
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/classes/$', ClassListView.as_view(), name='classes'),
    url(r'^class/create/$', ClassCreateView.as_view(), name='class-create'),
    url(r'^class/(?P<pk>[0-9]+)/$', ClassUpdateView.as_view(), name='class'),
    url(r'^class/(?P<pk>[0-9]+)/delete/$', ClassDeleteView.as_view(), name='class-delete'),
    url(r'^class/(?P<pk>[0-9]+)/remove_user/$', ClassRemoveUserView.as_view(), name='class-remove-user'),
    url(r'^class/(?P<pk>[0-9]+)/add_users/$', ClassAddUsersView.as_view(), name='class-add-users'),
    url(r'^class/(?P<pk>[0-9]+)/evaluations/$', ClassEvaluationsView.as_view(), name='class-evaluations'),

    # Evaluations
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/course_evaluations/$', GenericCourseView.as_view(template_name="course-evaluations.html"), name='course-evaluations'),

    # Services
    url(r'^api/', include(router.urls)),

    # Course Material
    url(r'^course/(?P<slug>[-a-zA-Z0-9_]+)/material/file_upload/$', FileUploadView.as_view(), name='file_upload'),
    url(r'^course/(?P<slug>[-a-zA-Z0-9_]+)/material/$', CourseMaterialView.as_view(), name='course_material'),

    # Slides.com embeds
    url(r'^activity/slides_reveal/(?P<pk>[0-9]+)$', SlidesRevealView.as_view()),

    # Notes
    url(r'^notes/(?P<username>[\w.+-]+)?$', UserNotesView.as_view(), name='user_notes'),
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/mynotes/$', CourseNotesView.as_view(), name='user_course_notes'),

    # Messages
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/messages/$', GenericCourseView.as_view(template_name="messages.html"), name='messages'),
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/message/(?P<message_id>[1-9][0-9]*)$', GenericCourseView.as_view(template_name="message.html"), name='message_detail'),
    url(r'^messages/$', TemplateView.as_view(template_name="messages-list.html"), name='message_detail'),
    url(r'^message/(?P<message_id>[1-9][0-9]*)$', TemplateView.as_view(template_name="messages-global-detail.html"), name='messages_global_detail'),

    # Messages Angular components
    url(r'^message-list.template.html', TemplateView.as_view(template_name="components/message-list.template.html")),
    url(r'^message-detail.template.html', TemplateView.as_view(template_name="components/message-detail.template.html")),
    url(r'^message-create.template.html', TemplateView.as_view(template_name="components/message-create.template.html")),

    # Classroom Angular components
    url(r'^classroom-list.template.html', TemplateView.as_view(template_name="components/classroom-list.template.html")),

    # Reports Angular components
    url(r'^city-participation-report.template.html', TemplateView.as_view(template_name="components/city-participation-report.template.html"), name='city-participation-report'),
    url(r'^city-participation-report-list.template.html', TemplateView.as_view(template_name="components/city-participation-report-list.template.html"), name='city-participation-report-list'),
    url(r'^classroom-participation-report.template.html', TemplateView.as_view(template_name="components/classroom-participation-report.template.html"), name='classroom-participation-report'),
    url(r'^general-user-report-list.template.html', TemplateView.as_view(template_name="components/general-user-report-list.template.html"), name='general-user-report-list'),
    url(r'^role-participation-report.template.html', TemplateView.as_view(template_name="components/role-participation-report.template.html"), name='role-participation-report'),
    url(r'^user-participation-graphics-report.template.html', TemplateView.as_view(template_name="components/user-participation-graphics-report.template.html"), name='user-participation-graphics-report'),
    url(r'^user-participation-report.template.html', TemplateView.as_view(template_name="components/user-participation-report.template.html"), name='user-participation-report'),

    # Reports
    url(r'^course/(?P<course_slug>[-a-zA-Z0-9_]+)/reports/$', GenericCourseView.as_view(template_name="administration/stats.html"), name='reports'),

    url(r'^general-reports/$', permission_required('is_staff')(GeneralReportsView.as_view()), name='general_reports'),

    url(r'^pages(?P<url>.*)$', FlatpageView.as_view(), name='flatpage'),

    # The django-rosetta
    # url(r'^rosetta/', include('rosetta.urls')),

    url(r'^djangular.js',
        TemplateView.as_view(template_name='djangular.js', content_type='text/javascript'),
        name='djangular',
    ),

    url(r'^user-report-list.template.html', TemplateView.as_view(template_name="user-report-list.html")),
    url(r'^user-report.template.html', TemplateView.as_view(template_name="user-report.html")),
    url(r'^user-course-report-list.template.html', TemplateView.as_view(template_name="user-course-report-list.html")),
    url(r'^user-course-report.template.html', TemplateView.as_view(template_name="user-course-report.html")),
    url(r'^user-actions-report-list.template.html', TemplateView.as_view(template_name="user-actions-report-list.html")),
    url(r'^user-access-report.template.html', TemplateView.as_view(template_name="user-access-report.html")),
]

if 'discussion' in settings.INSTALLED_APPS:
    urlpatterns += [url(r'^discussion/', include('discussion.urls', namespace='discussion')),]


if 'cards' in settings.INSTALLED_APPS:

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

if 'courses_notifications.apps.CoursesNotificationsConfig' in settings.INSTALLED_APPS:
    urlpatterns += [
        url(r'^api/', include('courses_notifications.urls', namespace='courses_notifications')),
    ]

if settings.TIMTEC_THEMES_COMPAT:
    from django.views.decorators.csrf import csrf_exempt

    urlpatterns += [
        url(r'^$', HomeView.as_view(), name='home_view'),
        url(r'^dashboard/', DashboardView.as_view(), name='dashboard'),

        url(r'^profile/edit/?$', ProfileEditView.as_view(), name="profile_edit"),
        url(r'^profile/(?P<username>[\w.+-]+)?/?$', ProfileView.as_view(), name="profile"),

        url(r'^contact/?$', csrf_exempt(ContactView.as_view()), name="contact"),

        # The django-allauth
        url(r'^accounts/', include('allauth.urls')),
    ]