# -*- coding: utf-8 -*-
"""
Authentication URL Configuration

This module defines URL patterns for authentication and authorization
including login, logout, registration, password reset, email verification,
and session management.

Author: Senior Django Developer
Date: 2024
"""

from django.urls import path, include
from django.views.generic import TemplateView
from apps.authentication import views

# Define the app namespace
app_name = "auth"

# URL patterns for authentication
urlpatterns = [
    # Authentication Views
    path("login", views.CustomLoginView.as_view(), name="login"),
    path("logout", views.CustomLogoutView.as_view(), name="logout"),
    path("register", views.RegisterView.as_view(), name="register"),


    # Password Reset Views
    path("password-reset", views.PasswordResetRequestView.as_view(), name="password_reset_request"),
    path("password-reset/sent", views.PasswordResetSentView.as_view(), name="password_reset_sent"),
    path("password-reset/confirm/<str:token>", views.PasswordResetConfirmView.as_view(), name="password_reset_confirm"),
    path("password-reset/complete", views.PasswordResetCompleteView.as_view(), name="password_reset_complete"),


    # Email Verification Views
    path("verify-email/<str:token>", views.EmailVerificationView.as_view(), name="verify_email"),
    path("resend-verification/<uuid:user_id>", views.ResendVerificationView.as_view(), name="resend_verification"),

    # path('password/reset', views.PasswordResetView.as_view(), name='password_reset'),
    # path('password/reset/confirm/<uidb64>/<token>', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    # path('password/change', views.PasswordChangeView.as_view(), name='password_change'),
    # path('password/change/done', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
    # path('password/reset/done', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    # path('activate/<uidb64>/<token>', views.ActivationView.as_view(), name='activate'),
    # path('resend/activation', views.ResendActivationView.as_view(), name='resend_activation'), 

    # Session Management Views
    path("sessions", views.user_sessions_view, name="user_sessions"),
    path("sessions/invalidate/<uuid:session_id>", views.invalidate_session_view, name="invalidate_session"),


    # API Endpoints
    path("api/auth/token", views.CustomAuthTokenView.as_view(), name="api_auth_token"),
    path("api/auth/logout", views.api_logout_view, name="api_logout"),
    path("api/sessions", views.api_user_sessions_view, name="api_user_sessions"),
]

# Additional URL patterns for development/testing
if hasattr(views, "debug_views"):
    # Add debug views if they exist (for development only)
    urlpatterns += [
        path("debug/", include("auth.debug_urls")),
    ]