"""Creative Management URL Configuration

URL patterns for creative asset management system.
Provides both API endpoints and traditional web views.

API Endpoints:
- /api/creatives/ - Creative CRUD operations
- /api/creative-versions/ - Version management
- /api/creative-templates/ - Template operations
- /api/creative-approvals/ - Approval workflow
- /api/creative-performance/ - Performance data

Web Views:
- /creatives/ - Creative list and management
- /creatives/upload/ - File upload interface
- /creatives/approval/ - Approval dashboard
- /creatives/templates/ - Template management
- /creatives/performance/ - Performance dashboard

AJAX Endpoints:
- /ajax/creative-search/ - Search functionality
- /ajax/creative-approve/ - Approval actions
- /ajax/creative-performance/ - Performance data
- /ajax/processing-status/ - File processing status

Features:
- RESTful API design
- Nested resource routing
- AJAX endpoint organization
- File upload handling
- Performance tracking
- Approval workflow
- Template management
"""

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

from . import views

# API Router Configuration
router = DefaultRouter()
router.register(r'creatives', views.CreativeViewSet, basename='creative')
router.register(r'creative-versions', views.CreativeVersionViewSet, basename='creative-version')
router.register(r'creative-templates', views.CreativeTemplateViewSet, basename='creative-template')
router.register(r'creative-approvals', views.CreativeApprovalViewSet, basename='creative-approval')
router.register(r'creative-performance', views.CreativePerformanceViewSet, basename='creative-performance')

# App namespace
app_name = 'creatives'

# URL Patterns
urlpatterns = [
    # API Endpoints
    path('api/', include(router.urls)),
    
    # Web Views - Creative Management
    path('', views.CreativeListView.as_view(), name='creative_list'),
    path('<int:pk>/', views.CreativeDetailView.as_view(), name='creative_detail'),
    path('upload/', views.creative_upload, name='creative_upload'),
    
    # Approval Workflow
    path('approval/', views.approval_dashboard, name='approval_dashboard'),
    
    # AJAX Endpoints - Creative Operations
    path('ajax/search/', views.ajax_creative_search, name='ajax_creative_search'),
    path('ajax/approve/<int:creative_id>/', views.ajax_creative_approve, name='ajax_creative_approve'),
    path('ajax/reject/<int:creative_id>/', views.ajax_creative_reject, name='ajax_creative_reject'),
    path('ajax/performance/<int:creative_id>/', views.ajax_creative_performance, name='ajax_creative_performance'),
    path('ajax/processing-status/<int:creative_id>/', views.ajax_processing_status, name='ajax_processing_status'),
    path('ajax/stats/', views.ajax_creative_stats, name='ajax_creative_stats'),
]

# Additional URL patterns for extended functionality
extended_patterns = [
    # Creative Version Management
    path('versions/', include([
        path('', views.CreativeVersionViewSet.as_view({'get': 'list'}), name='version_list'),
        path('<int:pk>/', views.CreativeVersionViewSet.as_view({'get': 'retrieve'}), name='version_detail'),
    ])),
    
    # Template Management
    path('templates/', include([
        path('', views.CreativeTemplateViewSet.as_view({'get': 'list', 'post': 'create'}), name='template_list'),
        path('<int:pk>/', views.CreativeTemplateViewSet.as_view({
            'get': 'retrieve',
            'put': 'update',
            'patch': 'partial_update',
            'delete': 'destroy'
        }), name='template_detail'),
        path('<int:pk>/use/', views.CreativeTemplateViewSet.as_view({
            'post': 'use_template'
        }), name='template_use'),
    ])),
    
    # Performance Analytics
    path('performance/', include([
        path('', views.CreativePerformanceViewSet.as_view({'get': 'list'}), name='performance_list'),
        path('<int:pk>/', views.CreativePerformanceViewSet.as_view({'get': 'retrieve'}), name='performance_detail'),
    ])),
    
    # Approval Management
    path('approvals/', include([
        path('', views.CreativeApprovalViewSet.as_view({'get': 'list'}), name='approval_list'),
        path('<int:pk>/', views.CreativeApprovalViewSet.as_view({'get': 'retrieve'}), name='approval_detail'),
    ])),
]

# Add extended patterns to main urlpatterns
urlpatterns.extend(extended_patterns)

# API Documentation patterns (if needed)
api_doc_patterns = [
    # API Schema and Documentation
    # path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
    # path('api/docs/', SpectacularSwaggerView.as_view(url_name='creatives:schema'), name='swagger-ui'),
    # path('api/redoc/', SpectacularRedocView.as_view(url_name='creatives:schema'), name='redoc'),
]

# Uncomment to add API documentation
# urlpatterns.extend(api_doc_patterns)

# Custom URL patterns for specific creative types
creative_type_patterns = [
    # Image Creative Management
    path('images/', include([
        path('', views.CreativeListView.as_view(extra_context={'creative_type': 'image'}), name='image_list'),
        path('upload/', views.creative_upload, {'creative_type': 'image'}, name='image_upload'),
    ])),
    
    # Video Creative Management
    path('videos/', include([
        path('', views.CreativeListView.as_view(extra_context={'creative_type': 'video'}), name='video_list'),
        path('upload/', views.creative_upload, {'creative_type': 'video'}, name='video_upload'),
    ])),
    
    # Audio Creative Management
    path('audio/', include([
        path('', views.CreativeListView.as_view(extra_context={'creative_type': 'audio'}), name='audio_list'),
        path('upload/', views.creative_upload, {'creative_type': 'audio'}, name='audio_upload'),
    ])),
    
    # HTML Creative Management
    path('html/', include([
        path('', views.CreativeListView.as_view(extra_context={'creative_type': 'html'}), name='html_list'),
        path('upload/', views.creative_upload, {'creative_type': 'html'}, name='html_upload'),
    ])),
]

# Add creative type patterns
urlpatterns.extend(creative_type_patterns)

# Bulk operation patterns
bulk_patterns = [
    path('bulk/', include([
        path('create/', views.CreativeViewSet.as_view({'post': 'bulk_create'}), name='bulk_create'),
        path('approve/', views.CreativeViewSet.as_view({'post': 'bulk_approve'}), name='bulk_approve'),
        path('delete/', views.CreativeViewSet.as_view({'post': 'bulk_delete'}), name='bulk_delete'),
    ])),
]

# Add bulk operation patterns
urlpatterns.extend(bulk_patterns)

# Advanced AJAX patterns
advanced_ajax_patterns = [
    path('ajax/', include([
        # Creative Management
        path('creative/', include([
            path('duplicate/<int:creative_id>/', views.CreativeViewSet.as_view({
                'post': 'duplicate'
            }), name='ajax_creative_duplicate'),
            path('toggle-status/<int:creative_id>/', views.ajax_creative_toggle_status, name='ajax_creative_toggle_status'),
            path('update-priority/<int:creative_id>/', views.ajax_creative_update_priority, name='ajax_creative_update_priority'),
        ])),
        
        # File Operations
        path('file/', include([
            path('upload-progress/<int:creative_id>/', views.ajax_upload_progress, name='ajax_upload_progress'),
            path('processing-log/<int:creative_id>/', views.ajax_processing_log, name='ajax_processing_log'),
            path('thumbnail/<int:creative_id>/', views.ajax_generate_thumbnail, name='ajax_generate_thumbnail'),
        ])),
        
        # Performance Analytics
        path('analytics/', include([
            path('dashboard-data/', views.ajax_analytics_dashboard, name='ajax_analytics_dashboard'),
            path('export-data/', views.ajax_export_performance, name='ajax_export_performance'),
            path('compare/<int:creative_id1>/<int:creative_id2>/', views.ajax_compare_creatives, name='ajax_compare_creatives'),
        ])),
        
        # Template Operations
        path('template/', include([
            path('preview/<int:template_id>/', views.ajax_template_preview, name='ajax_template_preview'),
            path('variables/<int:template_id>/', views.ajax_template_variables, name='ajax_template_variables'),
            path('clone/<int:template_id>/', views.ajax_template_clone, name='ajax_template_clone'),
        ])),
        
        # Approval Workflow
        path('approval/', include([
            path('queue/', views.ajax_approval_queue, name='ajax_approval_queue'),
            path('history/<int:creative_id>/', views.ajax_approval_history, name='ajax_approval_history'),
            path('bulk-action/', views.ajax_bulk_approval_action, name='ajax_bulk_approval_action'),
        ])),
        
        # Compliance Checking
        path('compliance/', include([
            path('check/<int:creative_id>/', views.ajax_compliance_check, name='ajax_compliance_check'),
            path('report/<int:creative_id>/', views.ajax_compliance_report, name='ajax_compliance_report'),
            path('fix-issues/<int:creative_id>/', views.ajax_fix_compliance_issues, name='ajax_fix_compliance_issues'),
        ])),
        
        # A/B Testing
        path('testing/', include([
            path('create-variant/<int:creative_id>/', views.ajax_create_variant, name='ajax_create_variant'),
            path('variant-performance/<int:variant_id>/', views.ajax_variant_performance, name='ajax_variant_performance'),
            path('end-test/<int:creative_id>/', views.ajax_end_ab_test, name='ajax_end_ab_test'),
        ])),
    ])),
]

# Add advanced AJAX patterns (commented out by default)
# urlpatterns.extend(advanced_ajax_patterns)

# Webhook patterns for external integrations
webhook_patterns = [
    path('webhooks/', include([
        path('processing-complete/', views.webhook_processing_complete, name='webhook_processing_complete'),
        path('approval-notification/', views.webhook_approval_notification, name='webhook_approval_notification'),
        path('performance-update/', views.webhook_performance_update, name='webhook_performance_update'),
    ])),
]

# Add webhook patterns (commented out by default)
# urlpatterns.extend(webhook_patterns)

# Export/Import patterns
export_import_patterns = [
    path('export/', include([
        path('creatives/', views.export_creatives, name='export_creatives'),
        path('performance/', views.export_performance, name='export_performance'),
        path('templates/', views.export_templates, name='export_templates'),
    ])),
    
    path('import/', include([
        path('creatives/', views.import_creatives, name='import_creatives'),
        path('templates/', views.import_templates, name='import_templates'),
    ])),
]

# Add export/import patterns (commented out by default)
# urlpatterns.extend(export_import_patterns)

# Admin integration patterns
admin_patterns = [
    path('admin/', include([
        path('dashboard/', views.admin_dashboard, name='admin_dashboard'),
        path('system-stats/', views.admin_system_stats, name='admin_system_stats'),
        path('cleanup/', views.admin_cleanup, name='admin_cleanup'),
    ])),
]

# Add admin patterns (commented out by default)
# urlpatterns.extend(admin_patterns)