"""Channels URLs

This module defines URL patterns for the channels app.
It includes both API endpoints using Django REST Framework
and traditional Django views for web interface.

URL Patterns:
    - API endpoints for CRUD operations
    - Traditional web views for channel management
    - AJAX endpoints for dynamic functionality
    - File upload endpoints
    - Statistics and reporting endpoints

Features:
- RESTful API design
- Nested resource routing
- AJAX endpoint organization
- File upload handling
- Export functionality
"""

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

from . import views


# ============================================================================
# API Router Configuration
# ============================================================================

# Create router for API endpoints
router = DefaultRouter()
router.register(r'channels', views.ChannelViewSet, basename='channel')
router.register(r'zones', views.ChannelZoneViewSet, basename='channelzone')
router.register(r'codecs', views.ChannelCodecViewSet, basename='channelcodec')
router.register(r'jingles', views.JingleViewSet, basename='jingle')
router.register(r'daytimes', views.DayTimeViewSet, basename='daytime')


# ============================================================================
# URL Patterns
# ============================================================================

app_name = 'channels'

urlpatterns = [
    # ========================================================================
    # API Endpoints
    # ========================================================================
    path('api/', include(router.urls)),
    
    # ========================================================================
    # Traditional Django Views
    # ========================================================================
    
    # Channel Management
    path('', views.channel_list, name='channel_list'),
    path('channels/', views.channel_list, name='channel_list'),
    path('channels/<int:pk>/', views.channel_detail, name='channel_detail'),
    
    # Jingle Management
    path('jingles/', views.jingle_list, name='jingle_list'),
    
    # ========================================================================
    # AJAX Endpoints
    # ========================================================================
    
    # Channel-related AJAX endpoints
    path('ajax/channels/<int:channel_id>/zones/', 
         views.ajax_channel_zones, 
         name='ajax_channel_zones'),
    
    path('ajax/channels/<int:channel_id>/jingles/', 
         views.ajax_channel_jingles, 
         name='ajax_channel_jingles'),
    
    path('ajax/channels/<int:channel_id>/toggle-status/', 
         views.ajax_toggle_channel_status, 
         name='ajax_toggle_channel_status'),
    
    # Statistics AJAX endpoint
    path('ajax/stats/', 
         views.ajax_channel_stats, 
         name='ajax_channel_stats'),
]


# ============================================================================
# API URL Patterns (Alternative explicit routing)
# ============================================================================

# If you prefer explicit API routing instead of using the router,
# you can uncomment and use these patterns:

"""
api_urlpatterns = [
    # Channel API endpoints
    path('api/channels/', views.ChannelViewSet.as_view({
        'get': 'list',
        'post': 'create'
    }), name='api_channel_list'),
    
    path('api/channels/<int:pk>/', views.ChannelViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destroy'
    }), name='api_channel_detail'),
    
    # Channel zones
    path('api/channels/<int:pk>/zones/', views.ChannelViewSet.as_view({
        'get': 'zones'
    }), name='api_channel_zones'),
    
    # Channel codecs
    path('api/channels/<int:pk>/codecs/', views.ChannelViewSet.as_view({
        'get': 'codecs'
    }), name='api_channel_codecs'),
    
    # Channel jingles
    path('api/channels/<int:pk>/jingles/', views.ChannelViewSet.as_view({
        'get': 'jingles'
    }), name='api_channel_jingles'),
    
    # Channel statistics
    path('api/channels/statistics/', views.ChannelViewSet.as_view({
        'get': 'statistics'
    }), name='api_channel_statistics'),
    
    # Bulk operations
    path('api/channels/bulk-activate/', views.ChannelViewSet.as_view({
        'post': 'bulk_activate'
    }), name='api_channel_bulk_activate'),
    
    path('api/channels/bulk-deactivate/', views.ChannelViewSet.as_view({
        'post': 'bulk_deactivate'
    }), name='api_channel_bulk_deactivate'),
    
    # Export
    path('api/channels/export/', views.ChannelViewSet.as_view({
        'get': 'export'
    }), name='api_channel_export'),
    
    # Zone API endpoints
    path('api/zones/', views.ChannelZoneViewSet.as_view({
        'get': 'list',
        'post': 'create'
    }), name='api_zone_list'),
    
    path('api/zones/<int:pk>/', views.ChannelZoneViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destroy'
    }), name='api_zone_detail'),
    
    path('api/zones/by-channel/', views.ChannelZoneViewSet.as_view({
        'get': 'by_channel'
    }), name='api_zones_by_channel'),
    
    # Codec API endpoints
    path('api/codecs/', views.ChannelCodecViewSet.as_view({
        'get': 'list',
        'post': 'create'
    }), name='api_codec_list'),
    
    path('api/codecs/<int:pk>/', views.ChannelCodecViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destroy'
    }), name='api_codec_detail'),
    
    # Jingle API endpoints
    path('api/jingles/', views.JingleViewSet.as_view({
        'get': 'list',
        'post': 'create'
    }), name='api_jingle_list'),
    
    path('api/jingles/<int:pk>/', views.JingleViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destroy'
    }), name='api_jingle_detail'),
    
    path('api/jingles/upload/', views.JingleViewSet.as_view({
        'post': 'upload'
    }), name='api_jingle_upload'),
    
    path('api/jingles/by-type/', views.JingleViewSet.as_view({
        'get': 'by_type'
    }), name='api_jingles_by_type'),
    
    # DayTime API endpoints
    path('api/daytimes/', views.DayTimeViewSet.as_view({
        'get': 'list',
        'post': 'create'
    }), name='api_daytime_list'),
    
    path('api/daytimes/<int:pk>/', views.DayTimeViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destroy'
    }), name='api_daytime_detail'),
    
    path('api/daytimes/prime-time/', views.DayTimeViewSet.as_view({
        'get': 'prime_time'
    }), name='api_daytime_prime_time'),
]

# Add API patterns to main urlpatterns if using explicit routing
# urlpatterns += api_urlpatterns
"""


# ============================================================================
# URL Pattern Documentation
# ============================================================================

"""
URL Pattern Reference:

API Endpoints (using DefaultRouter):
- GET    /api/channels/                     - List all channels
- POST   /api/channels/                     - Create new channel
- GET    /api/channels/{id}/                - Get channel details
- PUT    /api/channels/{id}/                - Update channel
- PATCH  /api/channels/{id}/                - Partial update channel
- DELETE /api/channels/{id}/                - Delete channel
- GET    /api/channels/{id}/zones/          - Get channel zones
- GET    /api/channels/{id}/codecs/         - Get channel codecs
- GET    /api/channels/{id}/jingles/        - Get channel jingles
- GET    /api/channels/statistics/          - Get channel statistics
- POST   /api/channels/bulk-activate/       - Bulk activate channels
- POST   /api/channels/bulk-deactivate/     - Bulk deactivate channels
- GET    /api/channels/export/              - Export channels data

- GET    /api/zones/                        - List all zones
- POST   /api/zones/                        - Create new zone
- GET    /api/zones/{id}/                   - Get zone details
- PUT    /api/zones/{id}/                   - Update zone
- PATCH  /api/zones/{id}/                   - Partial update zone
- DELETE /api/zones/{id}/                   - Delete zone
- GET    /api/zones/by-channel/             - Get zones by channel

- GET    /api/codecs/                       - List all codecs
- POST   /api/codecs/                       - Create new codec
- GET    /api/codecs/{id}/                  - Get codec details
- PUT    /api/codecs/{id}/                  - Update codec
- PATCH  /api/codecs/{id}/                  - Partial update codec
- DELETE /api/codecs/{id}/                  - Delete codec

- GET    /api/jingles/                      - List all jingles
- POST   /api/jingles/                      - Create new jingle
- GET    /api/jingles/{id}/                 - Get jingle details
- PUT    /api/jingles/{id}/                 - Update jingle
- PATCH  /api/jingles/{id}/                 - Partial update jingle
- DELETE /api/jingles/{id}/                 - Delete jingle
- POST   /api/jingles/upload/               - Upload jingle file
- GET    /api/jingles/by-type/              - Get jingles by type

- GET    /api/daytimes/                     - List all time slots
- POST   /api/daytimes/                     - Create new time slot
- GET    /api/daytimes/{id}/                - Get time slot details
- PUT    /api/daytimes/{id}/                - Update time slot
- PATCH  /api/daytimes/{id}/                - Partial update time slot
- DELETE /api/daytimes/{id}/                - Delete time slot
- GET    /api/daytimes/prime-time/          - Get prime time slots

Web Interface:
- GET    /                                  - Channel list page
- GET    /channels/                         - Channel list page
- GET    /channels/{id}/                    - Channel detail page
- GET    /jingles/                          - Jingle list page

AJAX Endpoints:
- GET    /ajax/channels/{id}/zones/         - Get channel zones (AJAX)
- GET    /ajax/channels/{id}/jingles/       - Get channel jingles (AJAX)
- POST   /ajax/channels/{id}/toggle-status/ - Toggle channel status (AJAX)
- GET    /ajax/stats/                       - Get channel statistics (AJAX)

Query Parameters:
- ?provider=<provider>                     - Filter by provider
- ?status=<status>                         - Filter by status
- ?search=<term>                           - Search channels
- ?channel_id=<id>                         - Filter by channel
- ?type=<type>                             - Filter jingles by type
- ?page=<number>                           - Pagination
- ?ordering=<field>                        - Sort results
- ?format=<format>                         - Export format (csv, xlsx)

Example Usage:
- GET /api/channels/?provider=sfr&status=active
- GET /api/jingles/?channel_id=1&type=intro
- GET /channels/?search=france&page=2
- POST /ajax/channels/1/toggle-status/
"""