"""Accounts URLs

This module contains URL patterns for the accounts app.
It defines routes for authentication, user management, and profile functionality.
"""

from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.views.generic import TemplateView

from . import views

app_name = 'accounts'

# Authentication URLs
auth_urlpatterns = [
    path('login/', views.LoginView.as_view(), name='login'),
    path('logout/', views.LogoutView.as_view(), name='logout'),
    path('register/', views.RegisterView.as_view(), name='register'),
    
    # Password reset URLs
    path('password-reset/', 
         auth_views.PasswordResetView.as_view(
             template_name='accounts/password_reset.html',
             email_template_name='accounts/password_reset_email.html',
             subject_template_name='accounts/password_reset_subject.txt',
         ), 
         name='password_reset'),
    
    path('password-reset/done/', 
         auth_views.PasswordResetDoneView.as_view(
             template_name='accounts/password_reset_done.html'
         ), 
         name='password_reset_done'),
    
    path('reset/<uidb64>/<token>/', 
         auth_views.PasswordResetConfirmView.as_view(
             template_name='accounts/password_reset_confirm.html'
         ), 
         name='password_reset_confirm'),
    
    path('reset/done/', 
         auth_views.PasswordResetCompleteView.as_view(
             template_name='accounts/password_reset_complete.html'
         ), 
         name='password_reset_complete'),
]

# Profile URLs
profile_urlpatterns = [
    path('profile/', views.ProfileView.as_view(), name='profile'),
    path('profile/<uuid:pk>/', views.ProfileView.as_view(), name='profile_detail'),
    path('profile/edit/', views.ProfileEditView.as_view(), name='profile_edit'),
    path('password/change/', views.PasswordChangeView.as_view(), name='password_change'),
]

# Dashboard URLs
dashboard_urlpatterns = [
    path('dashboard/', views.DashboardView.as_view(), name='dashboard'),
]

# AJAX/API URLs
ajax_urlpatterns = [
    path('ajax/check-username/', views.check_username_availability, name='check_username'),
    path('ajax/check-email/', views.check_email_availability, name='check_email'),
]

# API URLs
api_urlpatterns = [
    path('api/profile/', views.user_profile_api, name='api_profile'),
    path('api/profile/update/', views.update_profile_api, name='api_profile_update'),
    path('api/sessions/', views.user_sessions_api, name='api_sessions'),
    path('api/sessions/<int:session_id>/terminate/', 
         views.terminate_session_api, 
         name='api_session_terminate'),
]

# Main URL patterns
urlpatterns = [
    # Home page
    path('', views.HomeView.as_view(), name='home'),
    
    # Include all URL groups
    path('auth/', include(auth_urlpatterns)),
    path('', include(profile_urlpatterns)),
    path('', include(dashboard_urlpatterns)),
    path('', include(ajax_urlpatterns)),
    path('', include(api_urlpatterns)),
    
    # Static pages
    path('about/', views.AboutView.as_view(), name='about'),
    path('contact/', views.ContactView.as_view(), name='contact'),
    path('privacy/', views.PrivacyView.as_view(), name='privacy'),
    path('terms/', views.TermsView.as_view(), name='terms'),
    
    # User-specific pages
    path('settings/', views.SettingsView.as_view(), name='settings'),
    path('email-verification/', views.EmailVerificationView.as_view(), name='email_verification'),
]