# -*- coding: utf-8 -*-
"""
Adtlas Activities URLs

This module contains URL patterns for the activities app, providing
comprehensive routing for both web views and REST API endpoints.

Features:
    - Web interface URLs for activity management
    - REST API endpoints for programmatic access
    - Dashboard and analytics URLs
    - Export and reporting URLs
    - User-specific activity feeds
    - Admin integration URLs

Author: Adtlas Development Team
Version: 1.0.0
Last Updated: 2025-01-27
"""

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

from . import views

# App namespace
app_name = 'activities'

# REST API Router
router = DefaultRouter()
# Note: We're using individual API views instead of ViewSets for more control

# Web interface URL patterns
web_urlpatterns = [
    # Activity listing and management
    path(
        '',
        views.ActivityListView.as_view(),
        name='activity_list'
    ),
    path(
        'list/',
        views.ActivityListView.as_view(),
        name='activity_list_alt'
    ),
    path(
        '<uuid:pk>/',
        views.ActivityDetailView.as_view(),
        name='activity_detail'
    ),
    
    # Dashboard and analytics
    path(
        'dashboard/',
        views.ActivityDashboardView.as_view(),
        name='dashboard'
    ),
    
    # Export functionality
    path(
        'export/csv/',
        views.export_activities_csv,
        name='export_csv'
    ),
    
    # User-specific views
    path(
        'user/<int:user_id>/',
        views.ActivityListView.as_view(),
        name='user_activities'
    ),
    
    # Category-specific views
    path(
        'category/<int:category_id>/',
        views.ActivityListView.as_view(),
        name='category_activities'
    ),
]

# REST API URL patterns
api_urlpatterns = [
    # Activity endpoints
    path(
        'activities/',
        views.ActivityListAPIView.as_view(),
        name='api_activity_list'
    ),
    path(
        'activities/<uuid:pk>/',
        views.ActivityDetailAPIView.as_view(),
        name='api_activity_detail'
    ),
    
    # Category endpoints
    path(
        'categories/',
        views.ActivityCategoryListAPIView.as_view(),
        name='api_category_list'
    ),
    
    # Summary endpoints
    path(
        'summaries/',
        views.ActivitySummaryListAPIView.as_view(),
        name='api_summary_list'
    ),
    
    # Statistics and analytics endpoints
    path(
        'statistics/',
        views.activity_statistics_api,
        name='api_statistics'
    ),
    
    # Quick logging endpoint
    path(
        'log/',
        views.log_activity_api,
        name='api_log_activity'
    ),
    
    # User activity feed endpoints
    path(
        'feed/',
        views.user_activity_feed_api,
        name='api_user_feed'
    ),
    path(
        'feed/<int:user_id>/',
        views.user_activity_feed_api,
        name='api_user_feed_specific'
    ),
]

# Apply format suffixes to API URLs
api_urlpatterns = format_suffix_patterns(api_urlpatterns)

# Main URL patterns
urlpatterns = [
    # Web interface
    path('', include(web_urlpatterns)),
    

    # REST API
    path('api/', include(api_urlpatterns)),
    
    # Router URLs (if we add ViewSets later)
    path('api/', include(router.urls)),
]

# Additional URL patterns for specific functionality
extra_urlpatterns = [
    # Real-time endpoints (for future WebSocket integration)
    path(
        'realtime/feed/',
        views.ActivityListAPIView.as_view(),
        name='realtime_feed'
    ),
    
    # Bulk operations endpoints
    path(
        'api/bulk/create/',
        views.ActivityListAPIView.as_view(),
        name='api_bulk_create'
    ),
    
    # Advanced analytics endpoints
    path(
        'api/analytics/trends/',
        views.activity_statistics_api,
        name='api_analytics_trends'
    ),
    path(
        'api/analytics/performance/',
        views.activity_statistics_api,
        name='api_analytics_performance'
    ),
    
    # Health check endpoint
    path(
        'api/health/',
        views.ActivityListAPIView.as_view(),
        name='api_health_check'
    ),
]

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

# URL pattern documentation
"""
URL Pattern Documentation
========================

Web Interface URLs:
------------------
- /activities/ - Main activity listing page
- /activities/list/ - Alternative activity listing page
- /activities/<uuid>/ - Activity detail page
- /activities/dashboard/ - Activity dashboard and analytics
- /activities/export/csv/ - Export activities as CSV
- /activities/user/<user_id>/ - User-specific activities
- /activities/category/<category_id>/ - Category-specific activities

REST API URLs:
--------------
- /activities/api/activities/ - List/Create activities
- /activities/api/activities/<uuid>/ - Retrieve/Update/Delete activity
- /activities/api/categories/ - List/Create categories
- /activities/api/summaries/ - List activity summaries
- /activities/api/statistics/ - Activity statistics and analytics
- /activities/api/log/ - Quick activity logging
- /activities/api/feed/ - Current user activity feed
- /activities/api/feed/<user_id>/ - Specific user activity feed

Advanced URLs:
--------------
- /activities/realtime/feed/ - Real-time activity feed
- /activities/api/bulk/create/ - Bulk activity creation
- /activities/api/analytics/trends/ - Activity trend analytics
- /activities/api/analytics/performance/ - Performance analytics
- /activities/api/health/ - API health check

URL Parameters:
---------------
- <uuid:pk> - Activity UUID primary key
- <int:user_id> - User ID for user-specific views
- <int:category_id> - Category ID for category-specific views

Query Parameters (for filtering):
---------------------------------
- user - Filter by user ID
- category - Filter by category ID
- action - Filter by action type
- is_successful - Filter by success status
- date_from - Filter from date (YYYY-MM-DD)
- date_to - Filter to date (YYYY-MM-DD)
- search - Search in descriptions and user info
- page - Page number for pagination
- page_size - Number of items per page
- ordering - Field to order by (prefix with - for descending)

Example Usage:
--------------
# Get activities for a specific user
GET /activities/api/activities/?user=123

# Get failed activities from last week
GET /activities/api/activities/?is_successful=false&date_from=2025-01-20

# Search for login activities
GET /activities/api/activities/?search=login&action=login

# Get activity statistics for last 30 days
GET /activities/api/statistics/?days=30

# Export activities as CSV
GET /activities/export/csv/?date_from=2025-01-01&date_to=2025-01-31

Authentication:
---------------
All API endpoints require authentication. Web interface URLs require login.
Permissions are enforced based on user roles and specific permissions.

Response Formats:
-----------------
API endpoints support multiple formats:
- JSON (default): Add ?format=json or use Accept: application/json
- XML: Add ?format=xml or use Accept: application/xml
- CSV: Available for specific endpoints like statistics

Pagination:
-----------
List endpoints use pagination with the following structure:
{
    "links": {
        "next": "http://example.com/api/activities/?page=2",
        "previous": null
    },
    "count": 150,
    "page_size": 25,
    "total_pages": 6,
    "current_page": 1,
    "results": [...]
}

Error Handling:
---------------
API endpoints return appropriate HTTP status codes:
- 200: Success
- 201: Created
- 400: Bad Request (validation errors)
- 401: Unauthorized
- 403: Forbidden (permission denied)
- 404: Not Found
- 500: Internal Server Error

Rate Limiting:
--------------
API endpoints may be rate limited. Check response headers:
- X-RateLimit-Limit: Request limit per time window
- X-RateLimit-Remaining: Remaining requests in current window
- X-RateLimit-Reset: Time when rate limit resets

Versioning:
-----------
API versioning is handled through URL prefixes:
- /activities/api/v1/ - Version 1 (current)
- /activities/api/v2/ - Version 2 (future)

Caching:
--------
Some endpoints support caching:
- ETags for conditional requests
- Cache-Control headers for browser caching
- Vary headers for content negotiation

Security:
---------
- CSRF protection for web interface
- Authentication required for all endpoints
- Permission-based access control
- Input validation and sanitization
- SQL injection protection through ORM
- XSS protection through proper escaping
"""