from django.urls import path
from . import views

app_name = 'portal'

urlpatterns = [
    # Student
    path('student/dashboard/', views.StudentDashboardView.as_view(), name='student_dashboard'),

    # Teacher
    path('teacher/dashboard/', views.TeacherDashboardView.as_view(), name='teacher_dashboard'),
    path('teacher/courses/', views.TeacherCoursesView.as_view(), name='teacher_courses'),
    path('teacher/students/', views.TeacherStudentsView.as_view(), name='teacher_students'),
    path('teacher/timetable/', views.TeacherTimetableView.as_view(), name='teacher_timetable'),
    path('teacher/timetable/add/', views.TeacherTimetableCreateView.as_view(), name='teacher_timetable_add'),
    path('teacher/timetable/<int:pk>/edit/', views.TeacherTimetableUpdateView.as_view(), name='teacher_timetable_edit'),
    path('teacher/timetable/<int:pk>/delete/', views.TeacherTimetableDeleteView.as_view(), name='teacher_timetable_delete'),

    # Admin portal
    path('admin-portal/dashboard/', views.AdminDashboardView.as_view(), name='admin_dashboard'),
    path('admin-portal/applications/', views.ApplicationsListView.as_view(), name='applications_list'),
    path('admin-portal/applications/<int:pk>/', views.ApplicationReviewView.as_view(), name='application_review'),
    path('admin-portal/applications/<int:pk>/mark-fee-paid/', views.ApplicationFeeToggleView.as_view(), name='application_fee_toggle'),
    path('admin-portal/students/', views.StudentListView.as_view(), name='student_list'),
    path('admin-portal/students/<int:pk>/', views.StudentDetailView.as_view(), name='student_detail'),
    path('admin-portal/students/<int:pk>/toggle-edits/', views.StudentToggleEditsView.as_view(), name='student_toggle_edits'),
    path('admin-portal/students/<int:pk>/upload-document/', views.StudentDocumentUploadView.as_view(), name='student_upload_document'),
    path('admin-portal/students/<int:pk>/content-access/', views.StudentContentAccessView.as_view(), name='student_content_access'),
    path('admin-portal/notifications/read/', views.MarkNotificationsReadView.as_view(), name='mark_notifications_read'),
    path('notifications/<int:pk>/read/', views.MarkOneNotificationReadView.as_view(), name='mark_one_notification_read'),

    # Testimonials
    path('admin-portal/testimonials/', views.TestimonialListView.as_view(), name='testimonial_list'),
    path('admin-portal/testimonials/add/', views.TestimonialCreateView.as_view(), name='testimonial_add'),
    path('admin-portal/testimonials/<int:pk>/edit/', views.TestimonialUpdateView.as_view(), name='testimonial_edit'),
    path('admin-portal/testimonials/<int:pk>/delete/', views.TestimonialDeleteView.as_view(), name='testimonial_delete'),

    # Courses (admin)
    path('admin-portal/courses/', views.CourseListView.as_view(), name='course_list'),
    path('admin-portal/courses/add/', views.CourseCreateView.as_view(), name='course_add'),
    path('admin-portal/courses/<int:pk>/edit/', views.CourseUpdateView.as_view(), name='course_edit'),
    path('admin-portal/courses/<int:pk>/delete/', views.CourseDeleteView.as_view(), name='course_delete'),

    # Courses (student)
    path('student/courses/', views.StudentCoursesView.as_view(), name='student_courses'),

    # Payments (admin)
    path('admin-portal/payments/', views.PaymentListView.as_view(), name='payment_list'),
    path('admin-portal/payments/add/', views.PaymentCreateView.as_view(), name='payment_add'),
    path('admin-portal/payments/<int:pk>/edit/', views.PaymentUpdateView.as_view(), name='payment_edit'),
    path('admin-portal/payments/<int:pk>/delete/', views.PaymentDeleteView.as_view(), name='payment_delete'),

    # Payments (student)
    path('student/payments/', views.StudentPaymentHistoryView.as_view(), name='student_payments'),
    path('student/payments/<int:pk>/receipt/', views.StudentPaymentReceiptView.as_view(), name='payment_receipt'),
    path('student/payments/initiate/', views.FlutterwaveInitiateView.as_view(), name='payment_initiate'),
    path('student/payments/callback/', views.FlutterwaveStudentCallbackView.as_view(), name='payment_callback'),

    # Timetable (admin)
    path('admin-portal/timetable/', views.TimetableListView.as_view(), name='timetable_list'),
    path('admin-portal/timetable/add/', views.TimetableCreateView.as_view(), name='timetable_add'),
    path('admin-portal/timetable/<int:pk>/edit/', views.TimetableUpdateView.as_view(), name='timetable_edit'),
    path('admin-portal/timetable/<int:pk>/delete/', views.TimetableDeleteView.as_view(), name='timetable_delete'),

    # Timetable (student)
    path('student/timetable/', views.StudentTimetableView.as_view(), name='student_timetable'),

    # Certificates (admin)
    path('admin-portal/certificates/', views.CertificateListView.as_view(), name='certificate_list'),
    path('admin-portal/certificates/add/', views.CertificateCreateView.as_view(), name='certificate_add'),
    path('admin-portal/certificates/<int:pk>/edit/', views.CertificateUpdateView.as_view(), name='certificate_edit'),
    path('admin-portal/certificates/<int:pk>/delete/', views.CertificateDeleteView.as_view(), name='certificate_delete'),

    # Certificates (student)
    path('student/certificates/', views.StudentCertificatesView.as_view(), name='student_certificates'),
    path('student/certificates/<int:pk>/print/', views.StudentCertificatePrintView.as_view(), name='certificate_print'),

    # Programs (admin CRUD)
    path('admin-portal/programs/', views.ProgramListView.as_view(), name='program_list'),
    path('admin-portal/programs/add/', views.ProgramCreateView.as_view(), name='program_add'),
    path('admin-portal/programs/<int:pk>/edit/', views.ProgramUpdateView.as_view(), name='program_edit'),
    path('admin-portal/programs/<int:pk>/toggle/', views.ProgramToggleView.as_view(), name='program_toggle'),

    # Staff / Teacher management (admin)
    path('admin-portal/staff/', views.StaffListView.as_view(), name='staff_list'),
    path('admin-portal/staff/<int:pk>/', views.StaffDetailView.as_view(), name='staff_detail'),
    path('admin-portal/staff/<int:pk>/edit/', views.StaffEditView.as_view(), name='staff_edit'),

    # Notifications (admin)
    path('admin-portal/notifications/', views.NotificationListView.as_view(), name='notification_list'),
    path('admin-portal/notifications/compose/', views.NotificationComposeView.as_view(), name='notification_compose'),
    path('admin-portal/notifications/<int:pk>/toggle-read/', views.NotificationToggleReadView.as_view(), name='notification_toggle_read'),

    # Direct enrollment (admin)
    path('admin-portal/enroll/', views.DirectEnrollView.as_view(), name='direct_enroll'),

    # Donations (admin)
    path('admin-portal/donations/', views.DonationListView.as_view(), name='donation_list'),
    path('admin-portal/donations/<int:pk>/delete/', views.DonationDeleteView.as_view(), name='donation_delete'),

    # Gallery (admin)
    path('admin-portal/gallery/', views.GalleryListView.as_view(), name='gallery_list'),
    path('admin-portal/gallery/add/', views.GalleryCreateView.as_view(), name='gallery_add'),
    path('admin-portal/gallery/<int:pk>/edit/', views.GalleryUpdateView.as_view(), name='gallery_edit'),
    path('admin-portal/gallery/<int:pk>/delete/', views.GalleryDeleteView.as_view(), name='gallery_delete'),
    path('admin-portal/gallery/<int:pk>/toggle/', views.GalleryToggleView.as_view(), name='gallery_toggle'),

    # Reports (admin)
    path('admin-portal/reports/', views.ReportsView.as_view(), name='reports'),

    # Module permissions (super admin only)
    path('admin-portal/permissions/', views.AdminPermissionsListView.as_view(), name='admin_permissions'),
    path('admin-portal/permissions/<int:pk>/edit/', views.AdminPermissionsEditView.as_view(), name='admin_permissions_edit'),
]
