"""rosetta URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

import os
import django
from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.urls import include, path
from django.conf.urls import url
import logging

logger = logging.getLogger(__name__)

# Base App
from rosetta.core_app import api as core_app_api
from rosetta.core_app import views as core_app_views

# REST Framework & Swagger
from rest_framework import routers
from rest_framework.documentation import include_docs_urls
from rest_framework_swagger.views import get_swagger_view

urlpatterns = [

    # Pages
    url(r'^$', core_app_views.entrypoint),
    path('main/', core_app_views.main_view),
    path('login/', core_app_views.login_view),
    path('logout/', core_app_views.logout_view),
    url(r'^register/$', core_app_views.register_view),
    url(r'^pages/(?P<page_id>\w{0,36})/$', core_app_views.page_view),


    # Software
    url(r'^software/$', core_app_views.software),
    url(r'^add_software/$', core_app_views.add_software),
    url(r'^import_repository/$', core_app_views.import_repository),

    #Computing
    url(r'^computing/$', core_app_views.computing),

    # Storage
    url(r'^storage/$', core_app_views.storage),

    # Tasks
    url(r'^tasks/$', core_app_views.tasks),
    url(r'^new_task/$', core_app_views.new_task),
    url(r'^task_log/$', core_app_views.task_log),
    url(r'^task_connect/$', core_app_views.task_connect),

    # Sharable and direct connection links for tasks
    url(r'^direct_connect/(?P<uuid>[0-9a-f-]+)/$', core_app_views.direct_connection_handler),
    url(r'^t/(?P<short_uuid>\w{0,36})/$', core_app_views.sharable_link_handler),

    # Account
    url(r'^account/$', core_app_views.account),
    url(r'^add_profile_conf/$', core_app_views.add_profile_conf),

    # OpenID Connect Auth
    path('oidc/', include('mozilla_django_oidc.urls')),

    # Admin and API docs (Swagger)
    path('admin/', admin.site.urls),
    path('api/v1/doc/', get_swagger_view(title="Swagger Documentation")),

    # APIs
    path('api/v1/base/login/', core_app_api.login_api.as_view(), name='login_api'),
    path('api/v1/base/logout/', core_app_api.logout_api.as_view(), name='logout_api'),
    path('api/v1/base/agent/', core_app_api.agent_api.as_view(), name='agent_api'),
    path('api/v1/filemanager/', core_app_api.FileManagerAPI.as_view(), name='filemanager_api'),
    path('api/v1/import_repository/', core_app_api.ImportRepositoryAPI.as_view(), name='import_repository_api'),

    # Binder compatibility
    path('v2/git/<path:repository>', core_app_views.new_binder_task),


]


#============================
#  Serve static if required
#============================

# Get admin files location
admin_files_path = '/'.join(django.__file__.split('/')[0:-1]) + '/contrib/admin/static/admin'

if not settings.DEBUG:

    # Admin files
    urlpatterns.append(url(r'^static/admin/(?P<path>.*)$', django.views.static.serve, {'document_root': admin_files_path} ))

    # Rosetta Core app files
    document_root = 'rosetta/core_app/static'

    if os.path.isdir(document_root):
        logger.info('Serving static files for app "core_app" from document root "{}"'.format(document_root))
        # Static
        urlpatterns.append(url(r'^static/(?P<path>.*)$', django.views.static.serve, {'document_root': document_root} ))
    else:
        logger.warning('Not static files to serve?!')
else:
    logger.info('Not serving static files at all as DEBUG=True (Django will do it automatically)')