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

from django.conf import settings
from django.conf.urls.static import static

app_name = "NotCloudStorage"

router = DefaultRouter()
router.include_root_view = False


urlpatterns = [
    #path('admin/', admin.site.urls),
    
    # Manual route for root that uses your ViewSet action
    path('', views.NotCloudStorageViewSet.as_view({'get': 'default_page'}), name='root'),
    
    path('privacy/', views.NotCloudStorageViewSet.as_view({'get': 'privacy'}), name='root'),
    path('terms-of-service/', views.NotCloudStorageViewSet.as_view({'get': 'terms_of_service'}), name='root'),
    
    path('signup/', views.SignupViewSet.as_view({'get': 'signup', 'post': 'signup'}), name='signup'),
    
    # LOGIN AND LOGOUT ROUTES
    path('login/', views.LoginViewSet.as_view({'get': 'admin_login', 'post': 'admin_login'}), name='login'),
    path('logout/', views.LogoutViewSet.as_view({'get': 'logout_user'}), name='logout'),
    
    #FORGOT PASSWORD ROUTE
    path('forgot-password/', views.PasswordResetViewSet.as_view({'get': 'forgot_password', 'post': 'forgot_password'}), name='forgot_password'),
    path('reset-password/<str:uidb64>/<str:token>/', views.PasswordResetViewSet.as_view({'get': 'reset_password', 'post': 'reset_password'}), name='reset_password'),
    
    #PROFILE & CHANGE PASSWORD ROUTES
    path('profile/', views.ProfileViewSet.as_view({'get': 'view_profile', 'post': 'edit_profile'}), name='profile'),
    path('profile/change-password/', views.ProfileViewSet.as_view({'post': 'change_password'}), name='change_password'),
    
    
    #TRANSFER ROUTES
    path('transfer/new/', views.CloudTransferViewSet.as_view({'get': 'new_transfer', 'post': 'new_transfer'}), name='new_transfer'),
    
    #UPLOAAD LOCAL FILE ENDPOINT
    path('upload/local/', views.CloudTransferViewSet.as_view({'post': 'upload_local_file'}), name='upload_local_file'), 
    path('upload/chunk/', views.CloudTransferViewSet.as_view({'post': 'upload_chunk'}), name='upload_chunk'), 
    path('transfer/browse/', views.CloudTransferViewSet.as_view({'get': 'browse_folder'}), name='browse_folder'),
    
    
    #CONNECT, STORAGE SELECTION, AND PAYMENT ENDPOINTS
    path('transfer/cloud-connect/', views.CloudConnectViewSet.as_view({'get': 'cloud_connect', 'post': 'cloud_connect'}), name='cloud_connect'),
    path('transfer/storage/', views.StorageViewSet.as_view({'get': 'storage_selection', 'post': 'storage_selection'}), name='storage_selection'),
    path('transfer/payment/', views.PaymentViewSet.as_view({'get': 'payment_view', 'post': 'payment_view'}), name='payment_view'),
    path('payment/', views.StorageViewSet.as_view({'get': 'storage_selection', 'post': 'storage_selection'}), name='storage_selection'),
    
    #Client Order Status Routes
    path('transfer/orders/', views.ClientOrderStatusViewSet.as_view({'get': 'user_orders'}), name='user_orders'),
    path('transfer/status/<str:order_id>/', views.ClientOrderStatusViewSet.as_view({'get': 'order_status'}), name='order_status'),
    path('transfer/update-status/<str:order_id>/', views.ClientOrderStatusViewSet.as_view({'post': 'update_order_status'}), name='update_order_status'),

    
    
    
    #ADMIN DOWNLOAD ROUTES 
    # path('downloads/', views.AdminDownloadViewSet.as_view({'get': 'download_dashboard'}), name='download_dashboard'),
    # path('notcloudstorage/download-files/', views.AdminDownloadViewSet.as_view({'post': 'download_selected_files'}), name='download_selected_files'),
    # path('notcloudstorage/order-files/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'get_order_files'}), name='get_order_files'),
    # path('direct-download/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'direct_download'}), name='direct_download'),
    # path('download-local/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'download_local_file'}), name='download_local_file'),
    # path('download-status/<uuid:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'get_download_status'}), name='download-status'),
    # path('file-download-status/<uuid:order_id>/<uuid:file_id>/', views.AdminDownloadViewSet.as_view({'get': 'get_file_download_status'}), name='file-download-status'),
    
    # ADMIN DOWNLOAD ROUTES 
    path('downloads/', views.AdminDownloadViewSet.as_view({'get': 'download_dashboard'}), name='download_dashboard'),
    path('notcloudstorage/download-files/', views.AdminDownloadViewSet.as_view({'post': 'download_selected_files'}), name='download_selected_files'),
    path('notcloudstorage/order-files/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'get_order_files'}), name='get_order_files'),
    path('notcloudstorage/serve/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'serve_download'}), name='serve_download'),
    path('notcloudstorage/cancel-download/<str:order_id>/', views.AdminDownloadViewSet.as_view({'post': 'cancel_download'}), name='cancel_download'),
    path('notcloudstorage/retry/<str:order_id>/', views.AdminDownloadViewSet.as_view({'post': 'retry_download'}), name='retry_download'),
    path('notcloudstorage/delete-zip/<str:order_id>/', views.AdminDownloadViewSet.as_view({'post': 'delete_zip'}), name='delete_zip'),

    # Status endpoint'
    path('download-status/<uuid:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'download_status'}), name='download-status'),

    # (Optional) If you don’t need per‑file status, comment out or remove:
    # path('file-download-status/<uuid:order_id>/<uuid:file_id>/', ...)
    
    
    #UNCOMMENT THE PATH BELOW WHEN WE NEED TO ADJUST THE DOWNLOAD PROGRESS FEATURE.
    #path('notcloudstorage/download-status/<str:order_id>/', views.AdminDownloadViewSet.as_view({'get': 'direct_download'}), name='direct_download'),
    
    
    
    
    # Include router URLs for other endpoints
    #path('', include(router.urls)),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)