"""URL configuration for adspots app.

This module defines URL patterns for:
- REST API endpoints (ViewSets)
- Django template views
- File upload and processing endpoints
- Analytics and reporting endpoints
"""

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

# Create router for API endpoints
router = DefaultRouter()
router.register(r'adspots', views.AdspotViewSet, basename='adspot')
router.register(r'avails', views.AvailViewSet, basename='avail')
router.register(r'windows', views.WindowViewSet, basename='window')
router.register(r'adspots-in-avails', views.AdspotInAvailViewSet, basename='adspotinavail')
router.register(r'pending', views.PendingViewSet, basename='pending')

app_name = 'adspots'

urlpatterns = [
    # API endpoints
    path('api/', include(router.urls)),
    
    # Custom API endpoints
    path('api/adspots/<int:pk>/process/', views.AdspotViewSet.as_view({'post': 'process_file'}), name='adspot-process'),
    path('api/adspots/<int:pk>/reprocess/', views.AdspotViewSet.as_view({'post': 'reprocess_file'}), name='adspot-reprocess'),
    path('api/adspots/<int:pk>/analytics/', views.AdspotViewSet.as_view({'get': 'analytics'}), name='adspot-analytics'),
    path('api/adspots/bulk-upload/', views.AdspotViewSet.as_view({'post': 'bulk_upload'}), name='adspot-bulk-upload'),
    path('api/adspots/search/', views.AdspotViewSet.as_view({'get': 'search'}), name='adspot-search'),
    
    path('api/avails/<int:pk>/add-adspot/', views.AvailViewSet.as_view({'post': 'add_adspot'}), name='avail-add-adspot'),
    path('api/avails/<int:pk>/remove-adspot/', views.AvailViewSet.as_view({'post': 'remove_adspot'}), name='avail-remove-adspot'),
    path('api/avails/<int:pk>/analytics/', views.AvailViewSet.as_view({'get': 'analytics'}), name='avail-analytics'),
    path('api/avails/schedule/', views.AvailViewSet.as_view({'get': 'schedule'}), name='avail-schedule'),
    
    path('api/pending/<int:pk>/approve/', views.PendingViewSet.as_view({'post': 'approve'}), name='pending-approve'),
    path('api/pending/<int:pk>/reject/', views.PendingViewSet.as_view({'post': 'reject'}), name='pending-reject'),
    path('api/pending/bulk-approve/', views.PendingViewSet.as_view({'post': 'bulk_approve'}), name='pending-bulk-approve'),
    path('api/pending/bulk-reject/', views.PendingViewSet.as_view({'post': 'bulk_reject'}), name='pending-bulk-reject'),
    
    # File serving endpoints
    path('files/adspot/<int:adspot_id>/original/', views.serve_adspot_file, name='serve-adspot-original'),
    path('files/adspot/<int:adspot_id>/encoded/', views.serve_adspot_file, name='serve-adspot-encoded'),
    path('files/adspot/<int:adspot_id>/thumbnail/', views.serve_adspot_thumbnail, name='serve-adspot-thumbnail'),
    
    # Analytics and reporting endpoints
    path('api/analytics/dashboard/', views.analytics_dashboard, name='analytics-dashboard'),
    path('api/analytics/performance/', views.performance_analytics, name='performance-analytics'),
    path('api/analytics/utilization/', views.utilization_analytics, name='utilization-analytics'),
    path('api/analytics/export/', views.export_analytics, name='export-analytics'),
    
    # Processing status endpoints
    path('api/processing/status/', views.processing_status, name='processing-status'),
    path('api/processing/queue/', views.processing_queue, name='processing-queue'),
    path('api/processing/retry-failed/', views.retry_failed_processing, name='retry-failed-processing'),
    
    # Django template views (for admin interface)
    path('', views.AdspotListView.as_view(), name='adspot-list'),
    path('adspots/', views.AdspotListView.as_view(), name='adspot-list-alt'),
    path('adspots/create/', views.AdspotCreateView.as_view(), name='adspot-create'),
    path('adspots/<int:pk>/', views.AdspotDetailView.as_view(), name='adspot-detail'),
    path('adspots/<int:pk>/edit/', views.AdspotUpdateView.as_view(), name='adspot-update'),
    path('adspots/<int:pk>/delete/', views.AdspotDeleteView.as_view(), name='adspot-delete'),
    
    path('avails/', views.AvailListView.as_view(), name='avail-list'),
    path('avails/create/', views.AvailCreateView.as_view(), name='avail-create'),
    path('avails/<int:pk>/', views.AvailDetailView.as_view(), name='avail-detail'),
    path('avails/<int:pk>/edit/', views.AvailUpdateView.as_view(), name='avail-update'),
    path('avails/<int:pk>/delete/', views.AvailDeleteView.as_view(), name='avail-delete'),
    
    path('windows/', views.WindowListView.as_view(), name='window-list'),
    path('windows/create/', views.WindowCreateView.as_view(), name='window-create'),
    path('windows/<int:pk>/', views.WindowDetailView.as_view(), name='window-detail'),
    path('windows/<int:pk>/edit/', views.WindowUpdateView.as_view(), name='window-update'),
    path('windows/<int:pk>/delete/', views.WindowDeleteView.as_view(), name='window-delete'),
    
    path('pending/', views.PendingListView.as_view(), name='pending-list'),
    path('pending/create/', views.PendingCreateView.as_view(), name='pending-create'),
    path('pending/<int:pk>/', views.PendingDetailView.as_view(), name='pending-detail'),
    path('pending/<int:pk>/edit/', views.PendingUpdateView.as_view(), name='pending-update'),
    path('pending/<int:pk>/delete/', views.PendingDeleteView.as_view(), name='pending-delete'),
    
    # Dashboard and management views
    path('dashboard/', views.dashboard_view, name='dashboard'),
    path('upload/', views.upload_view, name='upload'),
    path('schedule/', views.schedule_view, name='schedule'),
    path('analytics/', views.analytics_view, name='analytics'),
    path('settings/', views.settings_view, name='settings'),
    
    # AJAX endpoints for dynamic content
    path('ajax/adspot-info/<int:adspot_id>/', views.ajax_adspot_info, name='ajax-adspot-info'),
    path('ajax/avail-adspots/<int:avail_id>/', views.ajax_avail_adspots, name='ajax-avail-adspots'),
    path('ajax/channel-avails/<int:channel_id>/', views.ajax_channel_avails, name='ajax-channel-avails'),
    path('ajax/processing-progress/', views.ajax_processing_progress, name='ajax-processing-progress'),
    
    # Utility endpoints
    path('utils/validate-file/', views.validate_file, name='validate-file'),
    path('utils/check-duplicates/', views.check_duplicates, name='check-duplicates'),
    path('utils/cleanup/', views.cleanup_files, name='cleanup-files'),
    
    # Integration endpoints
    path('integration/vast/validate/', views.validate_vast_url, name='validate-vast'),
    path('integration/export/xml/', views.export_xml, name='export-xml'),
    path('integration/import/xml/', views.import_xml, name='import-xml'),
    
    # Webhook endpoints for external integrations
    path('webhooks/processing-complete/', views.processing_complete_webhook, name='processing-complete-webhook'),
    path('webhooks/encoding-status/', views.encoding_status_webhook, name='encoding-status-webhook'),
]

# Additional URL patterns for development/debugging
if hasattr(views, 'debug_view'):
    urlpatterns += [
        path('debug/', views.debug_view, name='debug'),
        path('debug/models/', views.debug_models, name='debug-models'),
        path('debug/files/', views.debug_files, name='debug-files'),
    ]