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

This module defines URL patterns for the accounts app,
including both web views and API endpoints for user management.

Author: Senior Django Developer
Date: 2024
"""

from django.urls import path, include
from django.contrib.auth.decorators import login_required
from rest_framework.routers import DefaultRouter
from rest_framework.urlpatterns import format_suffix_patterns

from . import views

# Define the app namespace
app_name = "accounts"

# Create router for API ViewSets (if we had any)
router = DefaultRouter()
# router.register(r"users", views.UserViewSet)  # Example for future use

# Web view URL patterns
web_urlpatterns = [
    # User Registration
    path("register", views.UserRegistrationView.as_view(), name="register"),
    path("register/complete", views.RegistrationCompleteView.as_view(), name="registration_complete"),
    
    # User Profile Management
    path("profile", login_required(views.ProfileView.as_view()), name="profile"),
    path("profile/edit", login_required(views.ProfileUpdateView.as_view()), name="profile_edit"),
    path("settings", login_required(views.AccountSettingsView.as_view()), name="settings"),
    
    # User Management (Admin/Staff only)
    path("users", login_required(views.UserListView.as_view()), name="user_list" ),
    path("users/<uuid:user_id>", login_required(views.ProfileView.as_view()), name="user_detail"),
    path("users/<uuid:user_id>/toggle-status", login_required(views.toggle_user_status), name="toggle_user_status"),
    
    # Role Management (Admin only)
    path("roles", login_required(views.RoleManagementView.as_view()), name="role_list"),
    path("roles/assign", login_required(views.UserRoleAssignmentView.as_view()), name="role_assignment"),
]

# # Main URL patterns
# 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'), 
    
#     # User-specific pages
#     # path('settings/', views.SettingsView.as_view(), name='settings'),
#     # path('email-verification/', views.EmailVerificationView.as_view(), name='email_verification'),

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


# API URL patterns
api_urlpatterns = [
    # User API endpoints
    path(
        "api/users",
        views.UserListAPIView.as_view(),
        name="api_user_list"
    ),
    path(
        "api/users/<uuid:pk>",
        views.UserDetailAPIView.as_view(),
        name="api_user_detail"
    ),
    path(
        "api/users/stats",
        views.api_user_stats,
        name="api_user_stats"
    ),
    
    # Note: Additional API views can be added here when implemented
    # User Registration API - TODO: Implement UserRegistrationAPIView
    # User Profile API - TODO: Implement ProfileAPIView
    # Password Management API - TODO: Implement PasswordChangeAPIView
    
    # TODO: Implement additional API views when needed
    # Role Management API - TODO: Implement RoleListAPIView, RoleDetailAPIView, PermissionListAPIView
    # User Role Assignment API - TODO: Implement UserRoleAPIView, AssignUserRoleAPIView, RemoveUserRoleAPIView
    # Bulk Operations API - TODO: Implement BulkUserActivateAPIView, BulkUserDeactivateAPIView, BulkUserDeleteAPIView
    # Search and Filter API - TODO: Implement UserSearchAPIView, RoleSearchAPIView
    # User Activity API - TODO: Implement UserActivityAPIView
    # Avatar Upload API - TODO: Implement AvatarUploadAPIView, AvatarDeleteAPIView
]

# Apply format suffix patterns to API URLs
api_urlpatterns = format_suffix_patterns(api_urlpatterns)

# Combine all URL patterns
urlpatterns = [
    # Include web view patterns
    *web_urlpatterns,
    
    # Include API patterns
    *api_urlpatterns,
    
    # Include router URLs (for future ViewSets)
    path("api/", include(router.urls)),
]

# Additional URL patterns for specific use cases - TODO: Implement these views
extra_urlpatterns = [
    # TODO: Implement AJAX endpoints for dynamic content
    # AJAX endpoints - TODO: Implement check_email_availability, user_autocomplete, role_autocomplete
    
    # TODO: Implement export, import, invitation, and verification endpoints
    # Export endpoints - TODO: Implement export_users_csv, export_users_excel
    # Import endpoints - TODO: Implement ImportUsersView
    # User invitation system - TODO: Implement InviteUserView, AcceptInvitationView
    # Account verification - TODO: Implement EmailVerificationView, ResendVerificationView
]

# Add extra patterns to main urlpatterns
urlpatterns.extend(extra_urlpatterns)

# URL pattern documentation for developers
"""
URL Pattern Documentation:

Web Views:
- /accounts/register/ - User registration form
- /accounts/register/complete/ - Registration success page
- /accounts/profile/ - Current user's profile view
- /accounts/profile/edit/ - Edit current user's profile
- /accounts/settings/ - Account settings page
- /accounts/users/ - User management list (admin)
- /accounts/users/<uuid>/ - Specific user profile view
- /accounts/roles/ - Role management (admin)
- /accounts/roles/assign/ - Role assignment interface

API Endpoints:
- GET/POST /accounts/api/users/ - List/create users
- GET/PUT/DELETE /accounts/api/users/<uuid>/ - User detail operations
- POST /accounts/api/register/ - User registration via API
- GET/PUT /accounts/api/profile/ - Current user profile operations
- POST /accounts/api/password/change/ - Change password
- GET/POST /accounts/api/roles/ - List/create roles
- GET/PUT/DELETE /accounts/api/roles/<id>/ - Role detail operations

AJAX Endpoints:
- POST /accounts/ajax/check-email/ - Check email availability
- GET /accounts/ajax/user-autocomplete/ - User search autocomplete
- GET /accounts/ajax/role-autocomplete/ - Role search autocomplete

Utility Endpoints:
- GET /accounts/export/users/csv/ - Export users to CSV
- GET /accounts/export/users/excel/ - Export users to Excel
- POST /accounts/import/users/ - Import users from file
- POST /accounts/invite/ - Send user invitation
- GET /accounts/invite/accept/<token>/ - Accept invitation
- GET /accounts/verify-email/<token>/ - Verify email address

All authenticated endpoints require login.
Admin endpoints require staff/superuser permissions.
API endpoints support JSON format and proper HTTP methods.
"""