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

This module defines URL patterns for the accounts app, providing
routing for both web views and API endpoints related to user management,
profiles, and account operations.

URL Patterns:
    Web Views:
        - User list and detail views
        - Profile management
        - User administration
        - Bulk operations
        - Export functionality
    
    API Endpoints:
        - User CRUD operations
        - Profile management
        - Authentication endpoints
        - Bulk operations
        - Statistics and reporting

Features:
    - RESTful API design
    - Permission-based access control
    - Versioned API endpoints
    - AJAX support for web views
    - Export and import functionality
    - Bulk operations

Usage:
    Include in main URL configuration:
    
    urlpatterns = [
        path('accounts/', include('apps.accounts.urls')),
    ]

Security:
    - Authentication required for most endpoints
    - Permission-based access control
    - CSRF protection for web views
    - Rate limiting for API endpoints
"""

from django.urls import path, include
from rest_framework.routers import DefaultRouter

from . import views

app_name = 'accounts'

# API Router for ViewSets
router = DefaultRouter()
router.register(r'users', views.UserViewSet, basename='user')

# Web URL patterns
web_patterns = [
    # User Management
    path('', views.UserListView.as_view(), name='user_list'),
    path('create/', views.UserCreateView.as_view(), name='user_create'),
    path('<int:pk>/', views.UserDetailView.as_view(), name='user_detail'),
    path('<int:pk>/edit/', views.UserUpdateView.as_view(), name='user_update'),
    path('<int:pk>/delete/', views.UserDeleteView.as_view(), name='user_delete'),
    
    # Profile Management
    path('profile/', views.ProfileView.as_view(), name='profile'),
    path('profile/edit/', views.ProfileUpdateView.as_view(), name='profile_update'),
    path('profile/avatar/', views.AvatarUpdateView.as_view(), name='avatar_update'),
    path('profile/password/', views.PasswordChangeView.as_view(), name='password_change'),
    
    # User Administration
    path('admin/', views.UserAdminView.as_view(), name='user_admin'),
    path('admin/statistics/', views.UserStatisticsView.as_view(), name='user_statistics'),
    path('admin/export/', views.UserExportView.as_view(), name='user_export'),
    path('admin/import/', views.UserImportView.as_view(), name='user_import'),
    
    # Bulk Operations
    path('bulk/', views.BulkUserActionView.as_view(), name='bulk_action'),
    path('bulk/activate/', views.BulkActivateView.as_view(), name='bulk_activate'),
    path('bulk/deactivate/', views.BulkDeactivateView.as_view(), name='bulk_deactivate'),
    path('bulk/delete/', views.BulkDeleteView.as_view(), name='bulk_delete'),
    
    # AJAX Endpoints
    path('ajax/search/', views.UserSearchAjaxView.as_view(), name='ajax_search'),
    path('ajax/toggle-status/<int:pk>/', views.ToggleUserStatusAjaxView.as_view(), name='ajax_toggle_status'),
    path('ajax/user-info/<int:pk>/', views.UserInfoAjaxView.as_view(), name='ajax_user_info'),
    path('ajax/check-email/', views.CheckEmailAjaxView.as_view(), name='ajax_check_email'),
]

# API URL patterns
api_patterns = [
    # User Management API
    path('', include(router.urls)),
    
    # Authentication API
    path('auth/login/', views.LoginAPIView.as_view(), name='api_login'),
    path('auth/logout/', views.LogoutAPIView.as_view(), name='api_logout'),
    path('auth/register/', views.RegisterAPIView.as_view(), name='api_register'),
    path('auth/password-change/', views.PasswordChangeAPIView.as_view(), name='api_password_change'),
    path('auth/password-reset/', views.PasswordResetAPIView.as_view(), name='api_password_reset'),
    
    # Profile API
    path('profile/', views.ProfileAPIView.as_view(), name='api_profile'),
    path('profile/avatar/', views.AvatarUpdateAPIView.as_view(), name='api_avatar_update'),
    
    # User Statistics API
    path('statistics/', views.UserStatisticsAPIView.as_view(), name='api_statistics'),
    path('statistics/dashboard/', views.DashboardStatsAPIView.as_view(), name='api_dashboard_stats'),
    
    # Bulk Operations API
    path('bulk/actions/', views.BulkUserActionAPIView.as_view(), name='api_bulk_actions'),
    path('bulk/export/', views.BulkExportAPIView.as_view(), name='api_bulk_export'),
    
    # Search and Filter API
    path('search/', views.UserSearchAPIView.as_view(), name='api_search'),
    path('filter/', views.UserFilterAPIView.as_view(), name='api_filter'),
    
    # Admin Operations API
    path('admin/roles/', views.UserRolesAPIView.as_view(), name='api_user_roles'),
    path('admin/permissions/', views.UserPermissionsAPIView.as_view(), name='api_user_permissions'),
    path('admin/activity/<int:pk>/', views.UserActivityAPIView.as_view(), name='api_user_activity'),
]

# Main URL patterns
urlpatterns = [
    # Web views
    path('', include(web_patterns)),
    
    # API endpoints
    path('api/', include(api_patterns)),
]

# URL names for easy reference
url_names = {
    # Web URLs
    'user_list': 'accounts:user_list',
    'user_create': 'accounts:user_create',
    'user_detail': 'accounts:user_detail',
    'user_update': 'accounts:user_update',
    'user_delete': 'accounts:user_delete',
    'profile': 'accounts:profile',
    'profile_update': 'accounts:profile_update',
    'avatar_update': 'accounts:avatar_update',
    'password_change': 'accounts:password_change',
    'user_admin': 'accounts:user_admin',
    'user_statistics': 'accounts:user_statistics',
    'user_export': 'accounts:user_export',
    'user_import': 'accounts:user_import',
    'bulk_action': 'accounts:bulk_action',
    'bulk_activate': 'accounts:bulk_activate',
    'bulk_deactivate': 'accounts:bulk_deactivate',
    'bulk_delete': 'accounts:bulk_delete',
    
    # AJAX URLs
    'ajax_search': 'accounts:ajax_search',
    'ajax_toggle_status': 'accounts:ajax_toggle_status',
    'ajax_user_info': 'accounts:ajax_user_info',
    'ajax_check_email': 'accounts:ajax_check_email',
    
    # API URLs
    'api_login': 'accounts:api_login',
    'api_logout': 'accounts:api_logout',
    'api_register': 'accounts:api_register',
    'api_password_change': 'accounts:api_password_change',
    'api_password_reset': 'accounts:api_password_reset',
    'api_profile': 'accounts:api_profile',
    'api_avatar_update': 'accounts:api_avatar_update',
    'api_statistics': 'accounts:api_statistics',
    'api_dashboard_stats': 'accounts:api_dashboard_stats',
    'api_bulk_actions': 'accounts:api_bulk_actions',
    'api_bulk_export': 'accounts:api_bulk_export',
    'api_search': 'accounts:api_search',
    'api_filter': 'accounts:api_filter',
    'api_user_roles': 'accounts:api_user_roles',
    'api_user_permissions': 'accounts:api_user_permissions',
    'api_user_activity': 'accounts:api_user_activity',
}

# API endpoint documentation
api_endpoints = {
    'User Management': {
        'GET /api/users/': 'List all users',
        'POST /api/users/': 'Create new user',
        'GET /api/users/{id}/': 'Get user details',
        'PUT /api/users/{id}/': 'Update user',
        'PATCH /api/users/{id}/': 'Partial update user',
        'DELETE /api/users/{id}/': 'Delete user',
    },
    'Authentication': {
        'POST /api/auth/login/': 'User login',
        'POST /api/auth/logout/': 'User logout',
        'POST /api/auth/register/': 'User registration',
        'POST /api/auth/password-change/': 'Change password',
        'POST /api/auth/password-reset/': 'Reset password',
    },
    'Profile': {
        'GET /api/profile/': 'Get user profile',
        'PUT /api/profile/': 'Update profile',
        'POST /api/profile/avatar/': 'Update avatar',
    },
    'Statistics': {
        'GET /api/statistics/': 'Get user statistics',
        'GET /api/statistics/dashboard/': 'Get dashboard stats',
    },
    'Bulk Operations': {
        'POST /api/bulk/actions/': 'Perform bulk actions',
        'POST /api/bulk/export/': 'Export users',
    },
    'Search & Filter': {
        'GET /api/search/': 'Search users',
        'GET /api/filter/': 'Filter users',
    },
    'Admin Operations': {
        'GET /api/admin/roles/': 'Get user roles',
        'GET /api/admin/permissions/': 'Get user permissions',
        'GET /api/admin/activity/{id}/': 'Get user activity',
    }
}

# Example API usage
api_examples = {
    'Create User': {
        'method': 'POST',
        'url': '/api/users/',
        'data': {
            'email': 'user@example.com',
            'first_name': 'John',
            'last_name': 'Doe',
            'password': 'securepassword123',
            'password_confirm': 'securepassword123'
        }
    },
    'Update Profile': {
        'method': 'PUT',
        'url': '/api/profile/',
        'data': {
            'first_name': 'John',
            'last_name': 'Smith',
            'phone': '+1234567890',
            'bio': 'Updated bio'
        }
    },
    'Bulk Activate Users': {
        'method': 'POST',
        'url': '/api/bulk/actions/',
        'data': {
            'action': 'activate',
            'user_ids': [1, 2, 3, 4, 5]
        }
    },
    'Search Users': {
        'method': 'GET',
        'url': '/api/search/?q=john&role=user&is_active=true',
        'description': 'Search for active users with role "user" containing "john"'
    },
    'Get User Statistics': {
        'method': 'GET',
        'url': '/api/statistics/',
        'description': 'Get comprehensive user statistics'
    }
}