"""Advertisers URL Configuration

This module defines URL patterns for the advertisers app.
Includes both API endpoints and traditional Django views.

URL Patterns:
     - API endpoints for agencies, brands, categories
     - Traditional views for web interface
     - AJAX endpoints for dynamic functionality
"""

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

from apps.advertisers import views


# API Router for ViewSets
router = DefaultRouter()
router.register(r'agencies', views.AgencyViewSet, basename='agency')
router.register(r'brands', views.BrandViewSet, basename='brand')
router.register(r'categories', views.BrandCategoryViewSet, basename='category')
router.register(r'user-relationships', views.UserAdvertiserViewSet, basename='user-relationship')

# App namespace
app_name = 'advertisers'

urlpatterns = [ 
     # ========================================================================
     # Main List View - Combined Agencies and Brands
     # ========================================================================
     path('', views.advertiser_list, name='list'),

     # ========================================================================
     # Traditional Django Views - Agency Management
     # ========================================================================
     path('agencies/', views.agency_list, name='agency_list'),
     path('agencies/create/', views.agency_create, name='agency_create'),
     path('agencies/<int:agency_id>/', views.agency_detail, name='agency_detail'),
     path('agencies/<int:agency_id>/edit/', views.agency_edit, name='agency_edit'),
     path('agencies/<int:agency_id>/delete/', views.agency_delete, name='agency_delete'),

     # ========================================================================
     # Traditional Django Views - Brand Management
     # ========================================================================
     path('brands/', views.brand_list, name='brand_list'),
     path('brands/create/', views.brand_create, name='brand_create'),
     path('brands/<int:brand_id>/', views.brand_detail, name='brand_detail'),
     path('brands/<int:brand_id>/edit/', views.brand_edit, name='brand_edit'),
     path('brands/<int:brand_id>/delete/', views.brand_delete, name='brand_delete'),

     # ========================================================================
     # AJAX Endpoints
     # ========================================================================
     path('ajax/agency/<int:agency_id>/brands/', views.get_agency_brands, name='get_agency_brands'),
     path('ajax/brand/<int:brand_id>/toggle-status/', views.toggle_brand_status, name='toggle_brand_status'),
     path('ajax/agency/<int:agency_id>/performance/', views.agency_performance_data, name='agency_performance_data'),
     path('ajax/brand/<int:brand_id>/performance/', views.brand_performance_data, name='brand_performance_data'),

     # ========================================================================
     # Dashboard and Statistics
     # ========================================================================
     path('dashboard/stats/', views.dashboard_stats, name='dashboard_stats'),
     # ========================================================================
     # API URLs (REST Framework)
     # ========================================================================
     path('api/', include(router.urls)),

     # Additional API endpoints
     path('api/stats/dashboard/', views.dashboard_stats, name='api_dashboard_stats'),
]

# Additional URL patterns for specific API actions
api_urlpatterns = [
     # Agency specific endpoints
     path('api/agencies/<int:pk>/brands/', 
          views.AgencyViewSet.as_view({'get': 'brands'}), 
          name='api_agency_brands'),

     path('api/agencies/<int:pk>/stats/', 
          views.AgencyViewSet.as_view({'get': 'stats'}), 
          name='api_agency_stats'),

     # Brand specific endpoints
     path('api/brands/<int:pk>/campaigns/', 
          views.BrandViewSet.as_view({'get': 'campaigns'}), 
          name='api_brand_campaigns'),

     path('api/brands/<int:pk>/stats/', 
          views.BrandViewSet.as_view({'get': 'stats'}), 
          name='api_brand_stats'),

     # Category specific endpoints
     path('api/categories/tree/', 
          views.BrandCategoryViewSet.as_view({'get': 'tree'}), 
          name='api_category_tree'),
]

# Add API patterns to main urlpatterns
urlpatterns += api_urlpatterns

# URL patterns for different HTTP methods on the same endpoint
method_urlpatterns = [
    # Agency CRUD operations (if using function-based views)
    # path('agencies/create/', views.agency_create, name='agency_create'),
    # path('agencies/<int:agency_id>/edit/', views.agency_edit, name='agency_edit'),
    # path('agencies/<int:agency_id>/delete/', views.agency_delete, name='agency_delete'),
    
    # Brand CRUD operations (if using function-based views)
    # path('brands/create/', views.brand_create, name='brand_create'),
    # path('brands/<int:brand_id>/edit/', views.brand_edit, name='brand_edit'),
    # path('brands/<int:brand_id>/delete/', views.brand_delete, name='brand_delete'),
]

# Uncomment if you implement the CRUD views
# urlpatterns += method_urlpatterns