"""URL configuration for Jingles app."""

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

from . import views

# Create router for API endpoints
router = DefaultRouter()
router.register(r'categories', views.JingleCategoryViewSet, basename='jinglecategory')
router.register(r'types', views.JingleTypeViewSet, basename='jingletype')
router.register(r'jingles', views.JingleViewSet, basename='jingle')
router.register(r'playlists', views.JinglePlaylistViewSet, basename='jingleplaylist')
router.register(r'playlist-items', views.JinglePlaylistItemViewSet, basename='jingleplaylistitem')
router.register(r'schedules', views.JingleScheduleViewSet, basename='jingleschedule')

app_name = 'jingles'

urlpatterns = [
    # API endpoints
    path('api/', include(router.urls)),
    
    # Custom API endpoints
    path('api/jingles/<int:jingle_id>/play/', views.JinglePlayView.as_view(), name='api-jingle-play'),
    path('api/jingles/<int:jingle_id>/approve/', views.JingleApproveView.as_view(), name='api-jingle-approve'),
    path('api/jingles/<int:jingle_id>/reject/', views.JingleRejectView.as_view(), name='api-jingle-reject'),
    path('api/jingles/bulk-approve/', views.BulkJingleApproveView.as_view(), name='api-jingles-bulk-approve'),
    path('api/jingles/bulk-reject/', views.BulkJingleRejectView.as_view(), name='api-jingles-bulk-reject'),
    path('api/jingles/bulk-delete/', views.BulkJingleDeleteView.as_view(), name='api-jingles-bulk-delete'),
    path('api/jingles/upload/', views.JingleUploadView.as_view(), name='api-jingle-upload'),
    path('api/jingles/search/', views.JingleSearchView.as_view(), name='api-jingle-search'),
    path('api/jingles/popular/', views.PopularJinglesView.as_view(), name='api-jingles-popular'),
    path('api/jingles/recent/', views.RecentJinglesView.as_view(), name='api-jingles-recent'),
    
    # Playlist API endpoints
    path('api/playlists/<int:playlist_id>/items/', views.PlaylistItemsView.as_view(), name='api-playlist-items'),
    path('api/playlists/<int:playlist_id>/reorder/', views.PlaylistReorderView.as_view(), name='api-playlist-reorder'),
    path('api/playlists/<int:playlist_id>/duplicate/', views.PlaylistDuplicateView.as_view(), name='api-playlist-duplicate'),
    path('api/playlists/<int:playlist_id>/export/', views.PlaylistExportView.as_view(), name='api-playlist-export'),
    path('api/playlists/<int:playlist_id>/preview/', views.PlaylistPreviewView.as_view(), name='api-playlist-preview'),
    path('api/playlists/generate/', views.GeneratePlaylistView.as_view(), name='api-playlist-generate'),
    
    # Schedule API endpoints
    path('api/schedules/<int:schedule_id>/activate/', views.ScheduleActivateView.as_view(), name='api-schedule-activate'),
    path('api/schedules/<int:schedule_id>/deactivate/', views.ScheduleDeactivateView.as_view(), name='api-schedule-deactivate'),
    path('api/schedules/<int:schedule_id>/generate-playlist/', views.ScheduleGeneratePlaylistView.as_view(), name='api-schedule-generate-playlist'),
    path('api/schedules/active/', views.ActiveSchedulesView.as_view(), name='api-schedules-active'),
    path('api/schedules/current/', views.CurrentSchedulesView.as_view(), name='api-schedules-current'),
    
    # Statistics and reports API
    path('api/stats/overview/', views.JingleStatsOverviewView.as_view(), name='api-stats-overview'),
    path('api/stats/usage/', views.JingleUsageStatsView.as_view(), name='api-stats-usage'),
    path('api/stats/categories/', views.CategoryStatsView.as_view(), name='api-stats-categories'),
    path('api/stats/channels/', views.ChannelStatsView.as_view(), name='api-stats-channels'),
    path('api/reports/usage/', views.UsageReportView.as_view(), name='api-report-usage'),
    path('api/reports/performance/', views.PerformanceReportView.as_view(), name='api-report-performance'),
    
    # File management API
    path('api/files/validate/', views.FileValidationView.as_view(), name='api-file-validate'),
    path('api/files/metadata/', views.FileMetadataView.as_view(), name='api-file-metadata'),
    path('api/files/cleanup/', views.FileCleanupView.as_view(), name='api-file-cleanup'),
    
    # Export/Import API
    path('api/export/jingles/', views.ExportJinglesView.as_view(), name='api-export-jingles'),
    path('api/export/playlists/', views.ExportPlaylistsView.as_view(), name='api-export-playlists'),
    path('api/import/jingles/', views.ImportJinglesView.as_view(), name='api-import-jingles'),
    path('api/import/playlists/', views.ImportPlaylistsView.as_view(), name='api-import-playlists'),
    
    # Dashboard API
    path('api/dashboard/summary/', views.DashboardSummaryView.as_view(), name='api-dashboard-summary'),
    path('api/dashboard/recent-activity/', views.RecentActivityView.as_view(), name='api-dashboard-recent-activity'),
    path('api/dashboard/alerts/', views.DashboardAlertsView.as_view(), name='api-dashboard-alerts'),
    
    # Template views - Main pages
    path('', views.JingleDashboardView.as_view(), name='dashboard'),
    path('jingles/', views.JingleListView.as_view(), name='jingle-list'),
    path('jingles/create/', views.JingleCreateView.as_view(), name='jingle-create'),
    path('jingles/<int:pk>/', views.JingleDetailView.as_view(), name='jingle-detail'),
    path('jingles/<int:pk>/edit/', views.JingleUpdateView.as_view(), name='jingle-update'),
    path('jingles/<int:pk>/delete/', views.JingleDeleteView.as_view(), name='jingle-delete'),
    path('jingles/upload/', views.JingleUploadTemplateView.as_view(), name='jingle-upload-page'),
    path('jingles/pending/', views.PendingJinglesView.as_view(), name='jingles-pending'),
    path('jingles/approved/', views.ApprovedJinglesView.as_view(), name='jingles-approved'),
    path('jingles/rejected/', views.RejectedJinglesView.as_view(), name='jingles-rejected'),
    
    # Template views - Playlists
    path('playlists/', views.PlaylistListView.as_view(), name='playlist-list'),
    path('playlists/create/', views.PlaylistCreateView.as_view(), name='playlist-create'),
    path('playlists/<int:pk>/', views.PlaylistDetailView.as_view(), name='playlist-detail'),
    path('playlists/<int:pk>/edit/', views.PlaylistUpdateView.as_view(), name='playlist-update'),
    path('playlists/<int:pk>/delete/', views.PlaylistDeleteView.as_view(), name='playlist-delete'),
    path('playlists/<int:pk>/manage/', views.PlaylistManageView.as_view(), name='playlist-manage'),
    path('playlists/<int:pk>/preview/', views.PlaylistPreviewTemplateView.as_view(), name='playlist-preview-page'),
    
    # Template views - Schedules
    path('schedules/', views.ScheduleListView.as_view(), name='schedule-list'),
    path('schedules/create/', views.ScheduleCreateView.as_view(), name='schedule-create'),
    path('schedules/<int:pk>/', views.ScheduleDetailView.as_view(), name='schedule-detail'),
    path('schedules/<int:pk>/edit/', views.ScheduleUpdateView.as_view(), name='schedule-update'),
    path('schedules/<int:pk>/delete/', views.ScheduleDeleteView.as_view(), name='schedule-delete'),
    path('schedules/active/', views.ActiveSchedulesTemplateView.as_view(), name='schedules-active-page'),
    path('schedules/calendar/', views.ScheduleCalendarView.as_view(), name='schedule-calendar'),
    
    # Template views - Categories and Types
    path('categories/', views.CategoryListView.as_view(), name='category-list'),
    path('categories/create/', views.CategoryCreateView.as_view(), name='category-create'),
    path('categories/<int:pk>/', views.CategoryDetailView.as_view(), name='category-detail'),
    path('categories/<int:pk>/edit/', views.CategoryUpdateView.as_view(), name='category-update'),
    path('categories/<int:pk>/delete/', views.CategoryDeleteView.as_view(), name='category-delete'),
    
    path('types/', views.TypeListView.as_view(), name='type-list'),
    path('types/create/', views.TypeCreateView.as_view(), name='type-create'),
    path('types/<int:pk>/', views.TypeDetailView.as_view(), name='type-detail'),
    path('types/<int:pk>/edit/', views.TypeUpdateView.as_view(), name='type-update'),
    path('types/<int:pk>/delete/', views.TypeDeleteView.as_view(), name='type-delete'),
    
    # Template views - Reports and Analytics
    path('reports/', views.ReportsView.as_view(), name='reports'),
    path('reports/usage/', views.UsageReportTemplateView.as_view(), name='usage-report'),
    path('reports/performance/', views.PerformanceReportTemplateView.as_view(), name='performance-report'),
    path('reports/categories/', views.CategoryReportView.as_view(), name='category-report'),
    path('reports/channels/', views.ChannelReportView.as_view(), name='channel-report'),
    path('analytics/', views.AnalyticsView.as_view(), name='analytics'),
    path('analytics/trends/', views.TrendsAnalyticsView.as_view(), name='trends-analytics'),
    path('analytics/comparison/', views.ComparisonAnalyticsView.as_view(), name='comparison-analytics'),
    
    # Template views - Settings and Configuration
    path('settings/', views.JingleSettingsView.as_view(), name='settings'),
    path('settings/categories/', views.CategorySettingsView.as_view(), name='category-settings'),
    path('settings/types/', views.TypeSettingsView.as_view(), name='type-settings'),
    path('settings/upload/', views.UploadSettingsView.as_view(), name='upload-settings'),
    path('settings/playback/', views.PlaybackSettingsView.as_view(), name='playback-settings'),
    
    # Template views - Import/Export
    path('import-export/', views.ImportExportView.as_view(), name='import-export'),
    path('import/jingles/', views.ImportJinglesTemplateView.as_view(), name='import-jingles-page'),
    path('import/playlists/', views.ImportPlaylistsTemplateView.as_view(), name='import-playlists-page'),
    path('export/jingles/', views.ExportJinglesTemplateView.as_view(), name='export-jingles-page'),
    path('export/playlists/', views.ExportPlaylistsTemplateView.as_view(), name='export-playlists-page'),
    
    # Template views - Search and Browse
    path('search/', views.JingleSearchTemplateView.as_view(), name='search'),
    path('browse/', views.JingleBrowseView.as_view(), name='browse'),
    path('browse/categories/', views.BrowseCategoriesView.as_view(), name='browse-categories'),
    path('browse/types/', views.BrowseTypesView.as_view(), name='browse-types'),
    path('browse/channels/', views.BrowseChannelsView.as_view(), name='browse-channels'),
    
    # Template views - User Management
    path('users/', views.JingleUsersView.as_view(), name='users'),
    path('users/<int:user_id>/jingles/', views.UserJinglesView.as_view(), name='user-jingles'),
    path('users/<int:user_id>/playlists/', views.UserPlaylistsView.as_view(), name='user-playlists'),
    path('users/<int:user_id>/activity/', views.UserActivityView.as_view(), name='user-activity'),
    
    # Template views - Moderation
    path('moderation/', views.ModerationView.as_view(), name='moderation'),
    path('moderation/pending/', views.ModerationPendingView.as_view(), name='moderation-pending'),
    path('moderation/queue/', views.ModerationQueueView.as_view(), name='moderation-queue'),
    path('moderation/history/', views.ModerationHistoryView.as_view(), name='moderation-history'),
    
    # Template views - System
    path('system/', views.SystemView.as_view(), name='system'),
    path('system/status/', views.SystemStatusView.as_view(), name='system-status'),
    path('system/logs/', views.SystemLogsView.as_view(), name='system-logs'),
    path('system/maintenance/', views.SystemMaintenanceView.as_view(), name='system-maintenance'),
    
    # AJAX endpoints for dynamic content
    path('ajax/jingles/by-category/', views.JinglesByCategoryAjaxView.as_view(), name='ajax-jingles-by-category'),
    path('ajax/jingles/by-type/', views.JinglesByTypeAjaxView.as_view(), name='ajax-jingles-by-type'),
    path('ajax/jingles/by-channel/', views.JinglesByChannelAjaxView.as_view(), name='ajax-jingles-by-channel'),
    path('ajax/jingles/search/', views.JingleSearchAjaxView.as_view(), name='ajax-jingle-search'),
    path('ajax/jingles/<int:jingle_id>/approve/', views.JingleApproveAjaxView.as_view(), name='ajax-jingle-approve'),
    path('ajax/jingles/<int:jingle_id>/reject/', views.JingleRejectAjaxView.as_view(), name='ajax-jingle-reject'),
    path('ajax/jingles/<int:jingle_id>/toggle-active/', views.JingleToggleActiveAjaxView.as_view(), name='ajax-jingle-toggle-active'),
    
    path('ajax/playlists/<int:playlist_id>/items/', views.PlaylistItemsAjaxView.as_view(), name='ajax-playlist-items'),
    path('ajax/playlists/<int:playlist_id>/add-jingle/', views.PlaylistAddJingleAjaxView.as_view(), name='ajax-playlist-add-jingle'),
    path('ajax/playlists/<int:playlist_id>/remove-jingle/', views.PlaylistRemoveJingleAjaxView.as_view(), name='ajax-playlist-remove-jingle'),
    path('ajax/playlists/<int:playlist_id>/reorder/', views.PlaylistReorderAjaxView.as_view(), name='ajax-playlist-reorder'),
    
    path('ajax/schedules/current/', views.CurrentSchedulesAjaxView.as_view(), name='ajax-schedules-current'),
    path('ajax/schedules/<int:schedule_id>/toggle-active/', views.ScheduleToggleActiveAjaxView.as_view(), name='ajax-schedule-toggle-active'),
    
    # Utility endpoints
    path('utils/validate-file/', views.ValidateFileView.as_view(), name='validate-file'),
    path('utils/generate-thumbnail/', views.GenerateThumbnailView.as_view(), name='generate-thumbnail'),
    path('utils/check-duplicates/', views.CheckDuplicatesView.as_view(), name='check-duplicates'),
    path('utils/cleanup-files/', views.CleanupFilesView.as_view(), name='cleanup-files'),
    
    # Webhook endpoints
    path('webhooks/upload-complete/', views.UploadCompleteWebhookView.as_view(), name='webhook-upload-complete'),
    path('webhooks/processing-complete/', views.ProcessingCompleteWebhookView.as_view(), name='webhook-processing-complete'),
    path('webhooks/approval-status/', views.ApprovalStatusWebhookView.as_view(), name='webhook-approval-status'),
    
    # Health check and monitoring
    path('health/', views.HealthCheckView.as_view(), name='health-check'),
    path('metrics/', views.MetricsView.as_view(), name='metrics'),
    path('status/', views.StatusView.as_view(), name='status'),
]

# Apply format suffix patterns to API endpoints
api_patterns = [
    path('api/', include(router.urls)),
] + [url for url in urlpatterns if url.pattern._route.startswith('api/')]

api_patterns = format_suffix_patterns(api_patterns)

# Replace API patterns in main urlpatterns
urlpatterns = [url for url in urlpatterns if not url.pattern._route.startswith('api/')] + api_patterns