"""
Fichier principal de configuration des urls du projet GestioCOF
"""
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth import views as django_auth_views
from django.urls import include, path
from django.views.generic.base import TemplateView
from django_cas_ng import views as django_cas_views

admin.autodiscover()


urlpatterns = [
    path("admin/doc/", include("django.contrib.admindocs.urls")),
    path("admin/", admin.site.urls),
]

if "gestioncof" in settings.INSTALLED_APPS:
    from django_js_reverse.views import urls_js
    from wagtail.admin import urls as wagtailadmin_urls
    from wagtail.documents import urls as wagtaildocs_urls

    from gestioncof import csv_views, views as gestioncof_views
    from gestioncof.urls import (
        calendar_patterns,
        clubs_patterns,
        events_patterns,
        export_patterns,
        surveys_patterns,
    )

    # Also includes BdA, K-Fêt, etc.
    urlpatterns += [
        path("admin/logout/", gestioncof_views.logout),
        path(
            "admin/<slug:app_label>/<slug:model_name>/csv/",
            csv_views.admin_list_export,
            {"fields": ["username"]},
        ),
        # Page d'accueil
        path("", gestioncof_views.HomeView.as_view(), name="home"),
        # Le BdA
        path("bda/", include("bda.urls")),
        # Les exports
        path("export/", include(export_patterns)),
        # Les petits cours
        path("petitcours/", include("petitscours.urls")),
        # Les sondages
        path("survey/", include(surveys_patterns)),
        # Evenements
        path("event/", include(events_patterns)),
        # Calendrier
        path("calendar/", include(calendar_patterns)),
        # Clubs
        path("clubs/", include(clubs_patterns)),
        # Authentification
        path(
            "cof/denied",
            TemplateView.as_view(template_name="cof-denied.html"),
            name="cof-denied",
        ),
        path("cas/login", django_cas_views.LoginView.as_view(), name="cas_login_view"),
        path("cas/logout", django_cas_views.LogoutView.as_view()),
        path(
            "outsider/login",
            gestioncof_views.LoginExtView.as_view(),
            name="ext_login_view",
        ),
        path(
            "outsider/logout",
            django_auth_views.LogoutView.as_view(),
            {"next_page": "home"},
        ),
        path("login", gestioncof_views.login, name="cof-login"),
        path("logout", gestioncof_views.logout, name="cof-logout"),
        # Infos persos
        path("profile", gestioncof_views.profile, name="profile"),
        path(
            "outsider/password-change",
            django_auth_views.PasswordChangeView.as_view(),
            name="password_change",
        ),
        path(
            "outsider/password-change-done",
            django_auth_views.PasswordChangeDoneView.as_view(),
            name="password_change_done",
        ),
        # Inscription d'un nouveau membre
        path("registration", gestioncof_views.registration, name="registration"),
        path(
            "registration/clipper/<slug:login_clipper>/<fullname>",
            gestioncof_views.registration_form2,
            name="clipper-registration",
        ),
        path(
            "registration/user/<username>",
            gestioncof_views.registration_form2,
            name="user-registration",
        ),
        path(
            "registration/empty",
            gestioncof_views.registration_form2,
            name="empty-registration",
        ),
        # Autocompletion
        path(
            "autocomplete/registration",
            gestioncof_views.RegistrationAutocompleteView.as_view(),
            name="cof.registration.autocomplete",
        ),
        path(
            "user/autocomplete",
            gestioncof_views.UserAutocompleteView.as_view(),
            name="cof-user-autocomplete",
        ),
        # Liens utiles du COF et du BdA
        path("utile_cof", gestioncof_views.utile_cof, name="utile_cof"),
        path("utile_bda", gestioncof_views.utile_bda, name="utile_bda"),
        path("utile_bda/bda_diff", gestioncof_views.liste_bdadiff, name="ml_diffbda"),
        path("utile_cof/diff_cof", gestioncof_views.liste_diffcof, name="ml_diffcof"),
        path(
            "utile_bda/bda_revente",
            gestioncof_views.liste_bdarevente,
            name="ml_bda_revente",
        ),
        path("k-fet/", include("kfet.urls")),
        path("cms/", include(wagtailadmin_urls)),
        path("documents/", include(wagtaildocs_urls)),
        # djconfig
        path("config", gestioncof_views.ConfigUpdate.as_view(), name="config.edit"),
        # js-reverse
        path("jsreverse/", urls_js, name="js_reverse"),
    ]

if "bds" in settings.INSTALLED_APPS:
    urlpatterns.append(path("bds/", include("bds.urls")))

if "events" in settings.INSTALLED_APPS:
    # The new event application is still in development
    # → for now it is namespaced below events_v2
    # → rename this when the old events system is out
    urlpatterns += [path("event_v2/", include("events.urls"))]

if "authens" in settings.INSTALLED_APPS:
    urlpatterns.append(path("authens/", include("authens.urls")))

if "debug_toolbar" in settings.INSTALLED_APPS:
    import debug_toolbar

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

if settings.DEBUG:
    # Si on est en production, MEDIA_ROOT est servi par Apache.
    # Il faut dire à Django de servir MEDIA_ROOT lui-même en développement.
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# Wagtail for uncatched
if "wagtail.core" in settings.INSTALLED_APPS:
    from wagtail.core import urls as wagtail_urls

    urlpatterns += i18n_patterns(
        path("", include(wagtail_urls)), prefix_default_language=False
    )
