from django.conf import settings
from django.conf.urls.static import static
from django.urls import include, path, re_path
from django.views import defaults as default_views

from config import plugins
from funkwhale_api.common import admin

plugins_patterns = plugins.trigger_filter(plugins.URLS, [], enabled=True)

api_patterns = [
    re_path("v1/", include("config.urls.api")),
    re_path("v2/", include("config.urls.api_v2")),
    re_path("subsonic/", include("config.urls.subsonic")),
]


urlpatterns = [
    # Django Admin, use {% url 'admin:index' %}
    re_path(settings.ADMIN_URL, admin.site.urls),
    re_path(r"^api/", include((api_patterns, "api"), namespace="api")),
    re_path(
        r"^",
        include(
            ("funkwhale_api.federation.urls", "federation"), namespace="federation"
        ),
    ),
    re_path(
        r"^api/v1/auth/",
        include("funkwhale_api.users.rest_auth_urls"),
    ),
    re_path(
        r"^api/v2/auth/",
        include("funkwhale_api.users.rest_auth_urls"),
    ),
    re_path(r"^accounts/", include("allauth.urls")),
] + plugins_patterns

if settings.DEBUG:
    # This allows the error pages to be debugged during development, just visit
    # these url in browser to see how these error pages look like.
    urlpatterns += [
        re_path(r"^400/$", default_views.bad_request),
        re_path(r"^403/$", default_views.permission_denied),
        re_path(r"^404/$", default_views.page_not_found),
        re_path(r"^500/$", default_views.server_error),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    if "debug_toolbar" in settings.INSTALLED_APPS:
        import debug_toolbar

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

    if "silk" in settings.INSTALLED_APPS:
        urlpatterns = [
            re_path(r"^api/silk/", include("silk.urls", namespace="silk"))
        ] + urlpatterns
