from django.urls import path
from apps.certifications import views

app_name = 'certifications'

urlpatterns = [
    # Public
    path('', views.CertificationListView.as_view(), name='program_list'),
    path('verify/', views.CertificateVerifyView.as_view(), name='verify'),
    path('centers/', views.TestingCenterListView.as_view(), name='center_list'),
      path('certificate/<str:code>/details/', views.CertificateDetailsView.as_view(), name='certificate_details'),
    path('certificate/<str:code>/soft/', views.CertificateSoftCopyView.as_view(), name='certificate_soft'),
    path('certificate/<str:code>/hard/', views.CertificateHardCopyView.as_view(), name='certificate_hard'),
    path('certificate/<str:code>/', views.CertificatePublicView.as_view(), name='certificate_view'),
    path('program/<slug:slug>/', views.CertificationDetailView.as_view(), name='program_detail'),

    # Student
    path('program/<slug:slug>/apply/', views.ApplyCertificationView.as_view(), name='apply'),
    path('my/', views.MyCertificationsView.as_view(), name='my_certs'),
    path('application/<int:pk>/pay/', views.CertPayView.as_view(), name='pay'),
    path('application/<int:pk>/apply-promo/', views.ApplyCertPromoView.as_view(), name='apply_promo'),
    path('application/<int:pk>/clear-promo/', views.ClearCertPromoView.as_view(), name='clear_promo'),
    path('application/<int:pk>/pay/stripe/', views.CertStripeCheckoutView.as_view(), name='stripe_checkout'),
    path('application/<int:pk>/pay/success/', views.CertStripeSuccessView.as_view(), name='stripe_success'),
    path('application/<int:pk>/schedule/', views.ScheduleExamView.as_view(), name='schedule'),
    path('application/<int:pk>/unlock/', views.UnlockExamView.as_view(), name='unlock_exam'),
    path('application/<int:pk>/start/', views.StartExamPageView.as_view(), name='start_exam_page'),
    path('application/<int:pk>/start-exam/', views.StartExamView.as_view(), name='start_exam'),
    path('exam/<int:attempt_id>/', views.TakeExamView.as_view(), name='take_exam'),
    path('exam/<int:attempt_id>/launch/', views.ExamLaunchView.as_view(), name='exam_launch'),
    path('exam/<int:attempt_id>/begin/', views.BeginTimedExamView.as_view(), name='begin_timed_exam'),
    path('exam/<int:attempt_id>/cancel/', views.CancelExamView.as_view(), name='cancel_exam'),
    path('exam/<int:attempt_id>/result/', views.ExamResultView.as_view(), name='exam_result'),

    # Proctor (teacher / admin / support)
    path('proctor/', views.ProctorQueueView.as_view(), name='proctor_queue'),
    path('proctor/application/<int:pk>/', views.CreateProctorSessionView.as_view(), name='proctor_create'),
    path('proctor/session/<int:pk>/', views.ProctorSessionDetailView.as_view(), name='proctor_session_detail'),

    # Stripe webhook
    path('webhooks/stripe/', views.CertStripeWebhookView.as_view(), name='stripe_webhook'),

    # Admin / staff — centers & schedules
    path('manage/centers/', views.AdminCenterListView.as_view(), name='admin_centers'),
    path('manage/centers/create/', views.AdminCenterCreateView.as_view(), name='admin_center_create'),
    path('manage/centers/<int:pk>/edit/', views.AdminCenterEditView.as_view(), name='admin_center_edit'),
    path('manage/schedules/', views.AdminScheduleListView.as_view(), name='admin_schedules'),
    path('manage/schedules/create/', views.AdminScheduleCreateView.as_view(), name='admin_schedule_create'),
    path('manage/schedules/<int:pk>/edit/', views.AdminScheduleEditView.as_view(), name='admin_schedule_edit'),
    path('manage/schedules/<int:pk>/delete/', views.AdminScheduleDeleteView.as_view(), name='admin_schedule_delete'),
    path('manage/bookings/', views.AdminBookingsListView.as_view(), name='admin_bookings'),

    # Admin / staff — programs
    path('manage/', views.AdminProgramListView.as_view(), name='admin_programs'),
    path('manage/create/', views.AdminProgramCreateView.as_view(), name='admin_program_create'),
    path('manage/<int:pk>/edit/', views.AdminProgramEditView.as_view(), name='admin_program_edit'),
    path('manage/<int:pk>/questions/', views.AdminQuestionListView.as_view(), name='admin_questions'),
    path(
        'manage/<int:pk>/questions/sample-csv/',
        views.AdminQuestionCSVSampleView.as_view(),
        name='admin_questions_sample_csv',
    ),
    path(
        'manage/<int:pk>/questions/bulk-upload/',
        views.AdminQuestionBulkUploadView.as_view(),
        name='admin_questions_bulk_upload',
    ),
    path('manage/questions/<int:pk>/delete/', views.AdminQuestionDeleteView.as_view(), name='admin_question_delete'),
    path('manage/applications/', views.AdminApplicationListView.as_view(), name='admin_applications'),
    path('manage/applications/<int:pk>/', views.AdminApplicationDetailView.as_view(), name='admin_application_detail'),
    path('manage/applications/<int:pk>/approve/', views.AdminApproveApplicationView.as_view(), name='admin_approve'),
    path('manage/applications/<int:pk>/reject/', views.AdminRejectApplicationView.as_view(), name='admin_reject'),
    path('manage/certificates/', views.AdminCertificateListView.as_view(), name='admin_certificates'),
]
