#
# Copyright 2023 © AE UTBM
# ae@utbm.fr / ae.info@utbm.fr
#
# This file is part of the website of the UTBM Student Association (AE UTBM),
# https://ae.utbm.fr.
#
# You can find the source code of the website at https://github.com/ae-utbm/sith
#
# LICENSED UNDER THE GNU GENERAL PUBLIC LICENSE VERSION 3 (GPLv3)
# SEE : https://raw.githubusercontent.com/ae-utbm/sith/master/LICENSE
# OR WITHIN THE LOCAL FILE "LICENSE"
#
#
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from django.http import Http404
from django.urls import include, path
from django.views.decorators.cache import cache_page
from django.views.i18n import JavaScriptCatalog

from api.urls import api
from sith.sitemap import ClubSitemap, PagesSitemap, SithSitemap

js_info_dict = {"packages": ("sith",)}

handler403 = "core.views.forbidden"
handler404 = "core.views.not_found"
handler500 = "core.views.internal_servor_error"
sitemaps = {"sith": SithSitemap, "pages": PagesSitemap, "clubs": ClubSitemap}
urlpatterns = [
    path("", include(("core.urls", "core"), namespace="core")),
    path("sitemap.xml", cache_page(86400)(sitemap), {"sitemaps": sitemaps}),
    path("api/", api.urls),
    path("rootplace/", include(("rootplace.urls", "rootplace"), namespace="rootplace")),
    path(
        "subscription/",
        include(("subscription.urls", "subscription"), namespace="subscription"),
    ),
    path("com/", include(("com.urls", "com"), namespace="com")),
    path("club/", include(("club.urls", "club"), namespace="club")),
    path("counter/", include(("counter.urls", "counter"), namespace="counter")),
    path("eboutic/", include(("eboutic.urls", "eboutic"), namespace="eboutic")),
    path("sas/", include(("sas.urls", "sas"), namespace="sas")),
    path("election/", include(("election.urls", "election"), namespace="election")),
    path("forum/", include(("forum.urls", "forum"), namespace="forum")),
    path("trombi/", include(("trombi.urls", "trombi"), namespace="trombi")),
    path("matmatronch/", include(("matmat.urls", "matmat"), namespace="matmat")),
    path("pedagogy/", include(("pedagogy.urls", "pedagogy"), namespace="pedagogy")),
    path("admin/", admin.site.urls),
    path("i18n/", include("django.conf.urls.i18n")),
    path("jsi18n/", JavaScriptCatalog.as_view(), name="javascript-catalog"),
    path("captcha/", include("captcha.urls")),
    path("edt/", include(("timetable.urls", "timetable"), namespace="timetable")),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    import debug_toolbar

    urlpatterns += [
        path("__debug__/", include(debug_toolbar.urls)),
        path("galaxy/", include(("galaxy.urls", "galaxy"), namespace="galaxy")),
    ]


def sentry_debug(request):
    """Sentry debug endpoint

    This function always crash and allows us to test
    the sentry configuration and the modal popup
    displayed to users on production

    The error will be displayed on Sentry
    inside the "development" environment

    NOTE : you need to specify the SENTRY_DSN setting in .env
    """
    if settings.SENTRY_ENV != "development" or not settings.SENTRY_DSN:
        raise Http404
    _division_by_zero = 1 / 0


urlpatterns += [path("sentry-debug/", sentry_debug, name="sentry-debug")]
