"""
URL configuration for entralon project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.0/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'))
"""
from django.contrib import admin
from django.urls import include, path, re_path
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from graphene_django.views import GraphQLView
from graphql_jwt.decorators import jwt_cookie
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from rest_framework_simplejwt.views import TokenVerifyView
from django.conf.urls.i18n import i18n_patterns
from django.views.i18n import JavaScriptCatalog
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from django.contrib.sitemaps.views import sitemap

from development.sitemaps import DevelopmentSitemap
from .uploader import custom_upload_function
from main.sitemaps import LanguageSitemap
from .sitemaps import StaticViewSitemap
from django.views.static import serve
from django.views.decorators.cache import cache_page
from django.contrib.sitemaps.views import sitemap
from django.core.exceptions import PermissionDenied
from django.views.decorators.csrf import csrf_exempt
from debug_toolbar.toolbar import debug_toolbar_urls

graphiql = settings.DEBUG

admin.autodiscover()
admin.site.index_title = _('Entralon')
admin.site.site_header = _('Entralon Admin')
admin.site.site_title = _('Entralon Management')

sitemaps = {
    'static': StaticViewSitemap,
    'language': LanguageSitemap,
    'development': DevelopmentSitemap,
}

def trigger_error(request):
    division_by_zero = 1 / 0

urlpatterns = [
    path("api-gql", jwt_cookie(csrf_exempt(GraphQLView.as_view(graphiql=graphiql)))),
    path('', include('development.api_urls')),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
    path('sitemap.xml', cache_page(24 * 60 * 60)(sitemap), {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    path("ckeditor5/", include('django_ckeditor_5.urls')),
    path("cke5/upload/", custom_upload_function, name="custom_upload_file"),
    path("select2/", include("django_select2.urls")),
    path('sentry-debug/', trigger_error),
]
if settings.DEBUG:
    urlpatterns += debug_toolbar_urls()

urlpatterns += i18n_patterns(
    path('', include("main.urls")),
    path('', include("user.urls")),
    path('', include("geo_location.urls")),
    path('', include('development.urls')),
    path('admin/', admin.site.urls),
    
    re_path(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    prefix_default_language=False,
)

urlpatterns += staticfiles_urlpatterns()
if 'rosetta' in settings.INSTALLED_APPS:
    urlpatterns += [
        re_path(r'^translate/', include('rosetta.urls'))
    ]
    
def protected_serve(request, path, document_root=None, show_indexes=False):
    raise PermissionDenied()


def protected_customer_doc(request, path, document_root=None, show_indexes=False):
    pinfo = request.path_info
    perm = True     
    if perm:
        return serve(request, path, document_root, show_indexes)
    raise PermissionDenied()


urlpatterns += [
    re_path(r'^media/(?P<path>.*)$', protected_customer_doc,{'document_root': settings.MEDIA_ROOT}),
    re_path(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
]