"""
URL configuration for mysite project.

Subfolder deployment: set ``SITE_SUBPATH`` and use ``StripDeploySubpathMiddleware``
(see ``mysite/settings.py``).
"""

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.shortcuts import redirect
from django.urls import include, path, reverse_lazy
from django.views.generic.base import RedirectView
from django.conf.urls.i18n import i18n_patterns

from mainapp.controllers.seo_controller import robots_txt, sitemap_part_xml, sitemap_xml
from mainapp.utils.locale_path import default_language_code
from mysite.subpath_utils import resolve_site_subpath
from two_factor.urls import urlpatterns as tf_urls


def root_locale_redirect(request):
    """With ``prefix_default_language=True``, bare ``/`` redirects to the configured default locale."""
    sub = resolve_site_subpath()
    prefix = f"/{sub}" if sub else ""
    return redirect(f"{prefix}/{default_language_code()}/")


urlpatterns = [
    path("", root_locale_redirect),
    path(
        "accounts/login/",
        RedirectView.as_view(url="/account/login/", permanent=False),
        name="login",
    ),
    path(
        "accounts/logout/",
        auth_views.LogoutView.as_view(
            next_page=reverse_lazy("login"),
            template_name="registration/logged_out.html",
        ),
        name="logout",
    ),
    path("i18n/", include("django.conf.urls.i18n")),
    path("", include(tf_urls)),
    path("robots.txt", robots_txt, name="robots_txt"),
    path("sitemap.xml", sitemap_xml, name="sitemap_xml"),
    path(
        "sitemap_<slug:part>_<slug:lang>.xml",
        sitemap_part_xml,
        name="sitemap_part_xml",
    ),
    # Paython control panel — fixed path /admin/ (not under /en/ or /ar/)
    path("", include("mainapp.urls_dashboard")),
    # Public JSON API for headless frontends (Next.js, etc.)
    path("api/v1/", include("mainapp.api.urls")),
]

if getattr(settings, "DJANGO_ADMIN_ENABLED", True):
    urlpatterns.insert(1, path("django-admin/", admin.site.urls))

urlpatterns += i18n_patterns(
    path("", include("mainapp.urls_site")),
    path("tinymce/", include("tinymce.urls")),
    prefix_default_language=True,
)

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

handler404 = "mainapp.controllers.errors_controller.page_not_found"
