from django.urls import path, include
from django.contrib.auth.views import LogoutView
from . import views
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

from django.conf import settings              # ✅ FIX
from django.conf.urls.static import static    # ✅ FIX
from exams import views_reports_rank
# from django.utils.text import slugify

from . import views_reports_editable

from .views import (
    AcademicLevelCreateView,
    AcademicLevelListView,
    JointExamProjectCreateView,
    JointExamProjectListView,
    GradingRuleCreateView,
    GradingRuleListView,
    DivisionRuleCreateView,
    DivisionRuleListView,
    ExamScoreCreateView,
    ExamScoreListView,
    site_settings_edit,
    site_settings_preview,
    site_settings_preview,
    site_settings_reset,
    generate_users_from_schools
)


from . import public_views, views_website_management,views_reports_combined


app_name = "exams"

urlpatterns = [

# Site Settings


    # Site Settings
    path('site-settings/', views.site_settings_management, name='site_settings_management'),
    path('site-settings_edit/', site_settings_edit, name='site_settings_edit'),
    path('site-settings/preview/', site_settings_preview, name='site_settings_preview'),
    path('site-settings/reset/', site_settings_reset, name='site_settings_reset'),

    path('data-management/', views.data_management_dashboard, name='data_management_dashboard'),

    path("joint-results/", views.home, name="home"),
    path("news/<int:pk>/", views.news_detail, name="news_detail"),

    path(
        "projects/<str:project_code>/students/upload/",
        views.project_students_upload,
        name="project_students_upload",
    ),

    path('projects/<str:project_code>/upload/', 
         views.upload_final_processed_scores, 
         name='upload_final_processed_scores'),

    path('projects/<str:project_code>/students/template/', 
         views.download_student_template, 
         name='download_student_template'),

    path('projects/<str:project_code>/scores/template/', 
         views.download_score_template, 
         name='download_score_template'),


    # Template download URLs with academic level detection
    path('projects/<str:project_code>/template/student/', 
         views.download_academic_template, 
         {'template_type': 'student'},
         name='download_student_template'),
    
    path('projects/<str:project_code>/template/scores/', 
         views.download_academic_template, 
         {'template_type': 'scores'},
         name='download_score_template'),

    # path('', views.smart_dashboard, name='dashboard'),
    path('', views.project_list, name='dashboard'),

    path('dashboard-subjectwise/', views.dashboard_subjectwise, name='dashboard_subjectwise'),


    path('register/', views.register_page, name='register'),
    path('login/', views.login_view, name='login'),

    path("logout/", views.logout_view, name="logout"),


    path('smart-dashboard/', views.smart_dashboard, name='smart_dashboard'),

    # path("reports/general/excel/", export_general_excel),

    path(
      "projects/<str:project_code>/reports/combined/",
      views_reports_combined.combined_form_six_report,
      name="combined_form_six_report"
    ),

    path(
        "dashboard/website-management/",
        views_website_management.website_management,
        name="website_management",
    ),
    
    path(
        "projects/<int:pk>/process/",
        views.project_process,
        name="project_process",
    ),

    path(
        "projects/<str:project_code>/reports/editable/",
        views_reports_editable.editable_report,
        name="editable_report"
    ),
    
    # Export to Word directly
    path(
        "projects/<str:project_code>/reports/export-word/",
        views_reports_editable.export_report_to_word_view,
        name="export_report_word"
    ),
    
    # Save report to server
    path(
        "projects/<str:project_code>/reports/save/",
        views_reports_editable.save_report_to_server,
        name="save_report_to_server"
    ),
    
    # List saved reports
    path(
        "projects/<str:project_code>/reports/list/",
        views_reports_editable.list_saved_reports,
        name="list_saved_reports"
    ),

    path('projects/<str:project_code>/school-ranking/', views.project_school_ranking_html, name='project_school_ranking'),
    path('projects/<str:project_code>/school-ranking/print/', views.project_school_ranking_print, name='project_school_ranking_print'),
    path('projects/<str:project_code>/school-ranking/excel/', views.project_school_ranking_excel, name='project_school_ranking_excel'),
    path('projects/<str:project_code>/school-ranking/pdf/', views.project_school_ranking_pdf, name='project_school_ranking_pdf'),


    path(
        "projects/<str:project_code>/results/manage/",
        views.manage_school_results,
        name="manage_school_results"
    ),

    path('projects/<str:project_code>/subject-school-ranking/',
         views.subject_school_ranking_optimized,
         name='subject_school_ranking_optimized'),

    path('projects/<str:project_code>/subject-school-ranking/excel/',
         views.subject_school_ranking_excel,
         name='subject_school_ranking_excel'),

    path(
        "projects/<str:project_code>/toggle-live/",
        views.toggle_project_live,
        name="toggle_project_live"
    ),

    # ExamScore Standardization List
    path('projects/<str:project_code>/standardize-examscores/',
         views.examscore_standardization_list,
         name='examscore_standardization_list'),

    # Destandardize ExamScore (decrease marks)
    path('projects/<str:project_code>/examscore/<int:paper_id>/destandardize/',
         views.process_examscore_destandardization,
         name='process_examscore_destandardization'),

    # Destandardization Progress
    path('projects/<str:project_code>/examscore-destandardization-progress/<str:task_id>/',
         views.examscore_destandardization_progress,
         name='examscore_destandardization_progress'),

    # Get ExamScore data for modal
    path('projects/<str:project_code>/examscore/<int:paper_id>/standardize-data/',
         views.examscore_standardization_data,
         name='examscore_standardization_data'),

    # Process ExamScore Standardization
    path('projects/<str:project_code>/examscore/<int:paper_id>/standardize/',
         views.process_examscore_standardization,
         name='process_examscore_standardization'),

    # ExamScore Standardization Progress
    path('projects/<str:project_code>/examscore-standardization-progress/<str:task_id>/',
         views.examscore_standardization_progress,
         name='examscore_standardization_progress'),

    # Papers List for a subject (to show in the page)
    path('projects/<str:project_code>/subject/<int:subject_id>/papers/',
         views.subject_papers_list,
         name='subject_papers_list'),

    # School Paper Standardization List
    path('projects/<str:project_code>/school/<int:school_id>/standardize-papers/',
         views.school_paper_standardization_list,
         name='school_paper_standardization_list'),

    # School Paper Standardization (add marks)
    path('projects/<str:project_code>/school/<int:school_id>/paper/<int:paper_id>/standardize/',
         views.process_school_paper_standardization,
         name='process_school_paper_standardization'),

    # School Paper Destandardization (subtract marks)
    path('projects/<str:project_code>/school/<int:school_id>/paper/<int:paper_id>/destandardize/',
         views.process_school_paper_destandardization,
         name='process_school_paper_destandardization'),

    # School Paper Standardization Progress
    path('projects/<str:project_code>/school-paper-standardization-progress/<str:task_id>/',
         views.school_paper_standardization_progress,
         name='school_paper_standardization_progress'),

    # School Paper Destandardization Progress
    path('projects/<str:project_code>/school-paper-destandardization-progress/<str:task_id>/',
         views.school_paper_destandardization_progress,
         name='school_paper_destandardization_progress'),

    # path(
    #   "projects/<str:project_code>/schools/",
    #   views.project_school_results_list,
    #   name="project_school_results_list"
    # ),
    path(
        "projects/<str:project_code>/subjects/processed/delete/",
        views.delete_processed_subject_scores,
        name="delete_processed_subject_scores",
    ),

    # School Subject Standardization List
    path('projects/<str:project_code>/school/<int:school_id>/standardize-subjects/',
         views.school_subject_standardization_list,
         name='school_subject_standardization_list'),

    # School Subject Standardization (add marks)
    path('projects/<str:project_code>/school/<int:school_id>/subject/<int:subject_id>/standardize/',
         views.process_school_subject_standardization,
         name='process_school_subject_standardization'),

    # School Subject Destandardization (subtract marks)
    path('projects/<str:project_code>/school/<int:school_id>/subject/<int:subject_id>/destandardize/',
         views.process_school_subject_destandardization,
         name='process_school_subject_destandardization'),

    # School Subject Standardization Progress
    path('projects/<str:project_code>/school-subject-standardization-progress/<str:task_id>/',
         views.school_subject_standardization_progress,
         name='school_subject_standardization_progress'),

    # School Subject Destandardization Progress
    path('projects/<str:project_code>/school-subject-destandardization-progress/<str:task_id>/',
         views.school_subject_destandardization_progress,
         name='school_subject_destandardization_progress'),

    path('projects/<str:project_code>/school/all/detailed-results/print/',
         views.project_all_schools_detailed_results_print,
         name='project_all_schools_detailed_results_print'),

    path(
      "projects/<str:project_code>/rank-summary/",
      views.rank_summary_page,
      name="rank_summary_page"
    ),

    path(
      "projects/<str:project_code>/rank-summary/school/",
      views.project_school_rank_router,
      name="project_school_rank_router"
    ),

    path(
        "projects/<str:project_code>/reports/tables/",
        views_reports_combined.table_for_reports_writing,
        name="table_for_reports_writing"
    ),
 
    # School Ranking Router
    path('projects/<str:project_code>/school-rank/',
         views_reports_combined.project_school_rank_router,
         name='project_school_rank_router'),
    
    # Region School Ranking
    path('projects/<str:project_code>/school-rank/region/',
         views_reports_combined.region_school_ranking,
         name='region_school_ranking'),
    
    # District School Ranking
    path('projects/<str:project_code>/school-rank/district/',
         views_reports_combined.district_school_ranking,
         name='district_school_ranking'),
    
    # Overall School Ranking
    path('projects/<str:project_code>/school-rank/overall/',
         views_reports_combined.overall_school_ranking,
         name='overall_school_ranking'),
    
    # Excel Export
    path('projects/<str:project_code>/school-rank/excel/',
         views_reports_combined.school_ranking_excel,
         name='school_ranking_excel'),


    path(
        "projects/<str:project_code>/schools/results/",
        views.school_results_list,
        name="school_results_list"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/subject/<slug:subject_code>/paper-results/",
        views.project_school_paper_results,
        name="project_school_paper_results"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/all-papers-results/",
        views.project_school_all_papers_results,
        name="project_school_all_papers_results"
    ),



    path(
        "projects/<str:project_code>/school/<slug:school_code>/all-papers-excel/",
        views.export_school_all_papers_excel,
        name="export_school_all_papers_excel"
    ),

    path(
        "ajax/get-school-subjects/<str:project_code>/<slug:school_code>/",
        views.ajax_get_school_subjects,
        name="ajax_get_school_subjects"
    ),

    path(
        "test-subject-data/<str:project_code>/<slug:school_code>/",
        views.test_subject_data,
        name="test_subject_data"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/subject/<slug:subject_code>/performance/<str:report_type>/excel/",
        views.subject_performance_excel,
        name="subject_performance_excel"
    ),
    path(
        "projects/<str:project_code>/school/<slug:school_code>/subject/<slug:subject_code>/performance/<str:report_type>/print/",
        views.subject_performance_print,
        name="subject_performance_print"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/subject/<slug:subject_code>/performance/<str:report_type>/",
        views.subject_performance_report,
        name="subject_performance_report"
    ),

    # exams/urls.py
    path(
        "projects/<str:project_code>/subjects/<int:paper_id>/summary/pdf/",
        views.project_subject_summary_pdf,
        name="project_subject_summary_pdf"
    ),


    path(
        "projects/<str:project_code>/paper-summary-pdf/",
        views.subject_paper_progress_summary_pdf,
        name="subject_paper_progress_summary_pdf"
    ),

    path(
        "projects/<str:project_code>/reports/marking-progress/pdf/",
        views.project_marking_progress_pdf,
        name="project_marking_progress_pdf"
    ),

    # path(
    #     "projects/<str:project_code>/school/<slug:school_code>/summary/",
    #     views.joint_school_summary_html,
    #     name="joint_school_summary"
    # ),




    path(
        "projects/<str:project_code>/school/<int:school_id>/toggle/",
        views.toggle_school_results_status,
        name="toggle_school_results_status"
    ),


    path(
        "projects/<str:project_code>/students/sample/",
        views.project_students_sample_excel,
        name="project_students_sample_excel",
    ),

    # Combination list
    path(
        "combinations/",
        views.combination_list,
        name="combination_list"
    ),

    # Add single combination (modal)
    path(
        "combinations/add/",
        views.combination_add,
        name="combination_add"
    ),

    # Bulk upload
    path(
        "combinations/bulk-upload/",
        views.combination_bulk_upload,
        name="combination_bulk_upload"
    ),

    path(
        "projects/<str:project_code>/final-scores/delete-all/",
        views.delete_all_processed_scores,
        name="delete_all_processed_scores"
    ),


    path(
        "projects/<str:project_code>/scores/update/",
        views.update_scores_page,
        name="update_scores_page"
    ),
    path(
        "projects/<str:project_code>/scores/update/upload/",
        views.bulk_update_scores,
        name="bulk_update_scores"
    ),
    path(
        "scores/<int:score_id>/update/",
        views.update_single_score,
        name="update_single_score"
    ),
    path(
        "projects/<str:project_code>/scores/template/",
        views.update_scores_template,
        name="update_scores_template"
    ),



    # Download registered students for a paper (Excel template)
    path(
        "projects/<str:project_code>/papers/<int:paper_id>/download-registrations/",
        views.download_paper_registrations,
        name="download_paper_registrations"
    ),
    
    path(
        "projects/<str:project_code>/scripts-by-combination/",
        views.scripts_by_combination_upload,
        name="scripts_by_combination_upload"
    ),





    path(
        "projects/<str:project_code>/final-scores/progress/",
        views.upload_progress_status,
        name="upload_progress_status"
    ),


    path(
        "projects/<str:project_code>/final-scores/template/",
        views.final_scores_template_download,
        name="final_scores_template_download"
    ),

    path(
        "projects/<str:project_code>/scores/export/all/",
        views.export_all_subject_scores_csv,
        name="export_all_subject_scores_csv"
    ),

    path(
        "projects/<str:project_code>/scores/export/exam/",
        views.export_exam_scores_csv,
        name="export_exam_scores_csv"
    ),


    path(
        "projects/<str:project_code>/final-scores/export/pivot/",
        views.export_processed_scores_pivot_csv,
        name="export_processed_scores_pivot_csv"
    ),

    path(
        "projects/<str:project_code>/exam-scores/export/pivot/",
        views.export_exam_scores_pivot_csv,
        name="export_exam_scores_pivot_csv"
    ),


    # PROCESS PAGE (UI)
    path(
        "projects/<str:project_code>/results/process/",
        views.process_student_results_page,
        name="process_student_results_page"
    ),

    # ACTUAL PROCESS (AJAX)
    path(
        "projects/<str:project_code>/results/process/run/",
        views.generate_student_final_results,
        name="generate_student_final_results"
    ),

    # FINAL REPORT - student
    path(
        "projects/<str:project_code>/results/report/",
        views.student_final_results_report,
        name="student_final_results_report"
    ),

    # FINAL REPORT - school

    path(
        "projects/<str:project_code>/results/process/school/",
        views.generate_school_results,
        name="generate_school_results"
    ),

    path(
        "projects/<str:project_code>/papers/template/download/",
        views.download_papers_upload_template,
        name="download_papers_upload_template",
    ),

    path(
        "projects/<str:project_code>/results/final/delete/",
        views.delete_student_final_results,
        name="delete_student_final_results",
    ),

    path(
        "projects/<str:project_code>/results/school/delete/",
        views.delete_school_results,
        name="delete_school_results",
    ),

        path(
        "projects/<str:project_code>/results/subject/delete/",
        views.delete_subject_results,
        name="delete_subject_results",
    ),

    # PAGE (GET)
    path(
        "projects/<str:project_code>/subjects/process/",
        views.project_process_subjects,
        name="project_process_subjects"
    ),

    # PROCESS (POST AJAX)
    path(
        "projects/<str:project_code>/subjects/process/run/",
        views.process_subject_scores,
        name="process_subject_scores"
    ),



    path(
        "projects/<str:project_code>/results/process/subject/",
        views.generate_subject_results,
        name="generate_subject_results"
    ),

    path(
        "projects/<str:project_code>/subjects/report/",
        views.subject_results_report,
        name="subject_results_report"
    ),


    path(
        "rules/gpa/save/",
        views.save_gpa_rule,
        name="save_gpa_rule"
    ),

    path(
        "rules/",
        views.rules_management,
        name="rules_management"
    ),

    path(
        "projects/<str:project_code>/schools/ranking/",
        views.school_results_report,
        name="school_results_report"
    ),


    # AJAX endpoints
    path("rules/grading/save/", views.save_grading_rule, name="save_grading_rule"),
    path("rules/division/save/", views.save_division_rule, name="save_division_rule"),
    path("rules/subject/save/", views.save_subject_rule, name="save_subject_rule"),



    path(
        "combinations/<int:combination_id>/papers/",
        views.combination_papers_manage,
        name="combination_papers_manage"
    ),



    path(
        "combinations/<int:combination_id>/papers/modal/",
        views.combination_papers_modal,
        name="combination_papers_modal"
    ),

    path(
        "combinations/<int:combination_id>/papers/save/",
        views.combination_papers_save_ajax,
        name="combination_papers_save_ajax"
    ),



    path(
        "projects/<str:project_code>/students/<int:student_id>/assign/",
        views.assign_student_subjects,
        name="assign_student_subjects"
    ),

    path(
        "projects/<str:project_code>/students/<int:student_id>/delete/",
        views.delete_project_student,
        name="delete_project_student"
    ),


    path(
        "projects/<str:project_code>/students/<int:student_id>/papers/",
        views.get_student_papers_modal,
        name="get_student_papers_modal"
    ),

    path(
        "projects/<str:project_code>/students/<int:student_id>/papers/assign/",
        views.assign_student_papers_ajax,
        name="assign_student_papers_ajax"
    ),


    path("subject-papers/", views.subjectpaper_list, name="subjectpaper_list"),
    path("subject-papers/template/", views.subjectpaper_template_download, name="subjectpaper_template_download"),
    path("subject-papers/bulk-upload/", views.subjectpaper_bulk_upload, name="subjectpaper_bulk_upload"),


    path(
        "projects/<str:project_code>/papers/bulk/",
        views.get_bulk_papers_modal,
        name="get_bulk_papers_modal"
    ),

    path(
        "projects/<str:project_code>/papers/bulk/assign/",
        views.bulk_assign_papers_ajax,
        name="bulk_assign_papers_ajax"
    ),


    # Bulk student paper upload page
    path(
        "projects/<str:project_code>/papers/upload/",
        views.project_papers_upload,
        name="project_papers_upload"
    ),

    # AJAX upload handler
    path(
        "projects/<str:project_code>/papers/upload/ajax/",
        views.bulk_student_paper_upload,
        name="bulk_student_paper_upload"
    ),


    # Subject papers under project
    path(
        "projects/<str:project_code>/marks/",
        views.project_marks_subjects,
        name="project_marks_subjects"
    ),


    path(
        "projects/<str:project_code>/marks/<int:paper_id>/schools/<int:school_id>/print/",
        views.project_school_subject_print,
        name="project_school_subject_print"
    ),

    path(
        "projects/<str:project_code>/subjects/print-all/",
        views.project_subjects_all_schools_print,
        name="project_subjects_all_schools_print"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/detailed-results/excel/",
        views.export_school_detailed_results_excel,
        name="export_school_detailed_results_excel"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/necta-format/",
        views.necta_format_results,
        name="necta_format_results"
    ),

    path(
        "projects/<str:project_code>/papers/<int:paper_id>/print-all-schools/",
        views.project_subject_all_schools_print,
        name="project_subject_all_schools_print"
    ),


    path(
        "projects/<str:project_code>/reports/subject-paper-registrations/pdf/",
        views.subject_paper_registration_summary_pdf,
        name="subject_paper_registration_summary_pdf"
    ),

    # Schools per subject paper
    path(
        "projects/<str:project_code>/marks/<int:paper_id>/schools/",
        views.project_marks_schools,
        name="marks_schools"
    ),

    # Capture page
    path(
        "projects/<str:project_code>/marks/<int:paper_id>/school/<int:school_id>/",
        views.project_marks_capture_page,
        name="marks_capture_page"
    ),

    # AJAX save
    path(
        "projects/<str:project_code>/marks/save/",
        views.save_marks_ajax,
        name="save_marks_ajax"
    ),


    # ===============================
    # AUTH
    # ===============================
        # ✅ PUBLIC RESULTS (CORRECT)
    path(
        "results/<int:year>/<slug:exam_code>/",
        public_views.public_schools,
        name="public_schools",
    ),

    path(
        "projects/<str:project_code>/results/",
        public_views.public_project_schools,
        name="public_project_schools",
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/",
        public_views.public_school_results_by_project,
        name="public_school_results_by_project",
    ),



    path("users/toggle/<int:user_id>/", views.toggle_user_active, name="toggle_user_active"),

    path(
        "users/reset-password/<int:user_id>/",
        views.reset_user_password,
        name="reset_user_password"
    ),


    path(
        "users/edit/<int:user_id>/",
        views.edit_user_ajax,
        name="edit_user_ajax"
    ),


    path(
      "reports/check-school-summary/",
      views.check_school_summary_exists,
      name="check_school_summary_exists"
    ),


    # View results of a specific school
    path(
        "results/<int:year>/<slug:exam_code>/school/<slug:school_code>/",
        public_views.public_school_results,
        name="public_school_results",
    ),

    path(
        "joint-results/<str:filename>/",
        public_views.download_joint_pdf,
        name="download_joint_pdf"
    ),


    path("school-trend-print/", views.school_trend_print, name="school_trend_print"),
    path("region-trend-print/", views.region_trend_print, name="region_trend_print"),

    path("reports/district-summary-print/", views.district_summary_print, name="district_summary_print"),



    path("timetable/pdf/", views.timetable_pdf, name="timetable_pdf"),
    path("timetable/excel/", views.timetable_excel, name="timetable_excel"),


    path("template/<int:exam_id>/", views.download_template, name="download_template"),
    path("upload/<int:exam_id>/", views.upload_results, name="upload_results"),

    path("exam/<int:exam_id>/schools/", views.exam_schools, name="exam_schools"),

    path(
        "exam/<int:exam_id>/school/<slug:school_code>/",
        views.school_actions,
        name="school_actions",
    ),

    path('exam/<int:exam_id>/school/<str:school_code>/print_results/', 
         views.print_school_results, name='print_school_results'),

    path('exam/<int:exam_id>/school/<str:school_code>/print_students/', 
         views.print_students, name='print_students'),

    path('exam/<int:exam_id>/school/<str:school_code>/download_reports/', 
         views.download_reports, name='download_reports'),

    path('exam/<int:exam_id>/school/<str:school_code>/download_bulk_sms/', 
         views.download_bulk_sms, name='download_bulk_sms'),


    path(
        "exam/<int:exam_id>/school/<str:school_code>/export/excel/",
        views.download_school_results_excel,
        name="download_school_results_excel"
    ),

    path(
        "exam/<int:exam_id>/school/<str:school_code>/export/pdf/",
        views.download_school_results_pdf,
        name="download_school_results_pdf"
    ),


    path(
        "exam/<int:exam_id>/school/<str:school_code>/results/html/",
        views.school_results_html,
        name="school_results_html"
    ),

    path(
        "export-sms/<int:exam_id>/<slug:school_code>/",
        views.export_sms_xlsx,
        name="export_sms_xlsx",
    ),



    # ===============================
    # TIMETABLE
    # ===============================
    path("timetable/", views.timetable_view, name="timetable_view"),




    # path(
    #     "results/",
    #     include("exams.public_urls", namespace="public")
    # ),

    # path(
    #     'results/',
    #     include(('exams.public_urls', 'public'), namespace='public')
    # ),



    
    # path('logout/', LogoutView.as_view(next_page='exams:login'), name='logout'),

    path("school-summary-print/", views.school_summary_print, name="school_summary_print"),
    path("region-summary-print/", views.region_summary_print, name="region_summary_print"),




    # ===============================
    # CASCADE DROPDOWNS
    # ===============================
    path('ajax/get-districts/<int:region_id>/', views.ajax_get_districts, name='ajax_get_districts'),
    path('ajax/get-wards/<int:district_id>/', views.ajax_get_wards, name='ajax_get_wards'),
    path('ajax/get-schools/<int:ward_id>/', views.ajax_get_schools, name='ajax_get_schools'),

    # ===============================
    # USER MANAGEMENT
    # ===============================
    path("manage-users/", views.manage_users, name="manage_users"),
    path("users/update/<int:user_id>/", views.update_user, name="update_user"),
    path("users/delete/<int:user_id>/", views.delete_user, name="delete_user"),
    path("users/reset-password/<int:user_id>/", views.reset_user_password, name="reset_user_password"),

    # ===============================
    # PROFILE & PASSWORD
    # ===============================
    path("profile/", views.profile_view, name="profile"),
    path("profile/", views.profile_update, name="profile_update"),
    path("password/change/", views.change_password, name="change_password"),
   


    
    # REGIONWISE REPORTS
    path("reports/regionwise/", views.regionwise, name="regionwise"),

    # actual report endpoints
    path("reports/region/<int:region_id>/summary/", views.region_summary, name="region_summary"),
    path("reports/region/<int:region_id>/ranking/", views.region_ranking, name="region_ranking"),

    path("reports/region-summary/", views.region_summary, name="region_summary"),           
    path("reports/region-summary-html/", views.region_summary_html, name="region_summary_html"),            
    path("reports/region-summary-pdf/", views.region_summary_pdf, name="region_summary_pdf"),
    path("reports/region-summary-excel/", views.region_summary_excel, name="region_summary_excel"),

    path("reports/district-trend-print/", views.district_trend_print, name="district_trend_print"),

    
    path("subject-district-rank-excel/", views.subject_district_rank_excel, name="subject_district_rank_excel"),

    path("reports/subject-reg-school-rank-html/", views.subject_reg_school_rank_html, name="subject_reg_school_rank_html"),
    path("reports/subject-reg-school-rank-ext-html/", views.subject_reg_school_rank_ext_html, name="subject_reg_school_rank_ext_html"),
    path("reports/subject-reg-school-rank-excel/", views.subject_reg_school_rank_excel, name="subject_reg_school_rank_excel"),
    path("reports/subject-reg-school-rank-ext-excel/", views.subject_reg_school_rank_ext_excel, name="subject_reg_school_rank_ext_excel"),
 

    path("reports/subject-dis-school-rank-html/", views.subject_dis_school_rank_html, name="subject_dis_school_rank_html"),
    path("reports/subject-dis-school-rank-ext-html/", views.subject_dis_school_rank_ext_html, name="subject_dis_school_rank_ext_html"),
    path("reports/subject-dis-school-rank-excel/", views.subject_dis_school_rank_excel, name="subject_dis_school_rank_excel"),
    path("reports/subject-dis-school-rank-ext-excel/", views.subject_dis_school_rank_ext_excel, name="subject_dis_school_rank_ext_excel"),


    # Region - School ranking
    path("reports/region-school-rank-html/", views.region_school_ranking_html, name="region_school_ranking_html"),
    path("reports/region-school-rank-ext-html/", views.region_school_ranking_ext_html, name="region_school_ranking_ext_html"),

    path("reports/district-school-rank-html/", views.district_school_ranking_html, name="region_school_ranking_html"),
    path("reports/district-school-rank-ext-html/", views.district_school_ranking_ext_html, name="region_school_ranking_ext_html"),
 
    path("reports/region-school-ranking-print/", views.region_school_ranking_print, name="region_school_ranking_print"),
    path("reports/region-school-rank-ext-print/", views.region_school_ranking_ext_print, name="region_school_ranking_ext_print"),

    path("reports/district-school-ranking-print/", views.district_school_ranking_print, name="district_school_ranking_print"),
    path("reports/district-school-rank-ext-print/", views.district_school_ranking_ext_print, name="district_school_ranking_ext_print"),


    path("reports/region-school-ranking-excel/", views.region_school_ranking_excel, name="region_school_ranking_excel"),
    path("reports/region-school-rank-ext-excel/", views.region_school_ranking_ext_excel, name="region_school_ranking_ext_excel"),

    path("reports/district-school-ranking-excel/", views.district_school_ranking_excel, name="district_school_ranking_excel"),
    path("reports/district-school-rank-ext-excel/", views.district_school_ranking_ext_excel, name="district_school_ranking_ext_excel"),


    path("reports/region-school-ranking-pdf/", views.region_school_ranking_pdf, name="region_school_ranking_pdf"),
    # path("reports/region-school-rank-ext-pdf/", views.region_school_ranking_ext_pdf, name="region_school_ranking_ext_pdf"),
 
    path("reports/subject-district-rank-html/", views.subject_district_rank_html, name="subject_district_rank_html"),
    # RANKING
    path("reports/district-rank-html/", views.district_ranking_html, name="district_ranking_html"),
    path("reports/district-rank-pdf/", views.district_ranking_pdf, name="district_ranking_pdf"),
    path("reports/district-rank-excel/", views.district_ranking_excel, name="district_ranking_excel"),

    # WARD RANKING 
    path("reports/ward-rank-html/", views.ward_ranking_html, name="ward_ranking_html"),
    path("reports/ward-rank-pdf/", views.ward_ranking_pdf, name="ward_ranking_pdf"),
    path("reports/ward-rank-excel/", views.ward_ranking_excel, name="ward_ranking_excel"),


    # School ranking (HTML/PDF/Excel)
    path("reports/school-rank-html/", views.school_ranking_html, name="school_ranking_html"),
    path("reports/school-rank-pdf/",  views.school_ranking_pdf,  name="school_ranking_pdf"),
    path("reports/school-rank-excel/",views.school_ranking_excel,name="school_ranking_excel"),

    # School ranking (HTML/PDF/Excel)
    path("reports/reg-top-bottom/", views.best_schools_tables, name="best_schools_tables"),
    path("reports/reg-top-bottom/", views.best_schools_tables, name="best10_tables"),
    path("reports/reg-top-bottom-pdf/", views.best_schools_pdf, name="best10_pdf"),
    path("reports/reg-top-bottom-excel/", views.best_schools_excel, name="best10_excel"),

    # Region Subject Summary and Ranking
    path("reports/general-subject-summary/", views.general_subject_summary),

    # Export
    path("reports/general-subject-summary-pdf/", views.subject_summary_pdf),
    path("reports/general-subject-summary-excel/", views.subject_summary_excel),

    path("reports/reg-subj-rank/", views.regional_subject_school_ranking),


    path(
        "reports/reg-subj-rank-pdf/",
        views.regional_subject_school_ranking_pdf,
        name="regional_subject_school_ranking_pdf"
    ),
    path(
        "reports/reg-subj-rank-excel/",
        views.regional_subject_school_ranking_excel,
        name="regional_subject_school_ranking_excel"
    ),

    # ============================
    #   REGION TREND REPORTS
    # ============================
    path(
        "reports/region-trend-html/",
        views.region_trend_html,
        name="region_trend_html"
    ),
    path(
        "reports/region-trend-pdf/",
        views.region_trend_pdf,
        name="region_trend_pdf"
    ),
    path(
        "reports/region-trend-excel/",
        views.region_trend_excel,
        name="region_trend_excel"
    ),

    # ============================
    #   DISTRICT TREND REPORTS
    # ============================
    path(
        "reports/district-trend-html/",
        views.district_trend_html,
        name="district_trend_html"
    ),
    path(
        "reports/district-trend-pdf/",
        views.district_trend_pdf,
        name="district_trend_pdf"
    ),
    path(
        "reports/district-trend-excel/",
        views.district_trend_excel,
        name="district_trend_excel"
    ),


    path(
        "reports/district-subject-rank-pdf/",
        views.district_subject_rank_pdf,
        name="district_subject_rank_pdf"
    ),
    path(
        "reports/district-subject-rank-excel/",
        views.district_subject_rank_excel,
        name="district_subject_rank_excel"
    ),

    path("reports/region-trend-pdf-rl/", views.region_trend_pdf_reportlab,
         name="region_trend_pdf_rl"),

    path("reports/district-trend-pdf-rl/", views.district_trend_pdf_reportlab,
         name="district_trend_pdf_rl"),





    # DISTRICTWISE REPORTS
    path("reports/districtwise/", views.districtwise, name="districtwise"),

    path("reports/district-summary-html/", views.district_summary_html, name="district_summary_html"),            
    path("reports/district-summary-pdf/", views.district_summary_pdf, name="district_summary_pdf"),
    path("reports/district-summary-excel/", views.district_summary_excel, name="district_summary_excel"),

    path("reports/district-ward-html/", views.district_ward_ranking_html, name="district_ward_ranking_html"),            
    path("reports/district-ward-pdf/", views.district_ward_ranking_pdf, name="district_ward_ranking_pdf"),
    path("reports/district-ward-excel/", views.district_ward_ranking_excel, name="district_ward_ranking_excel"),

    path("reports/district-school-html/", views.district_school_ranking_html, name="district_ward_ranking_html"),            
    path("reports/district-school-pdf/", views.district_school_ranking_pdf, name="district_school_ranking_pdf"),
    path("reports/district-school-excel/", views.district_school_ranking_excel, name="district_school_ranking_excel"),


    path("reports/district-top-bottom-html/", views.district_top_bottom_html, name="district_top_bottom"),
    path("reports/district-top-bottom-pdf/", views.district_top_bottom_pdf, name="district_top_bottom_pdf"),
    path("reports/district-top-bottom-excel/", views.district_top_bottom_excel, name="district_top_bottom_excel"),


    path("reports/district-subject-summary/", views.district_subject_summary, name="district_subject_summary"),
    path("reports/district-subject-summary-pdf/", views.district_subject_summary_pdf),
    path("reports/district-subject-summary-excel/", views.district_subject_summary_excel),

    path("reports/district-subject-rank/", views.district_subject_school_ranking),
    path("reports/district-subject-rank-pdf/", views.district_subject_rank_pdf),
    path("reports/district-subject-rank-excel/", views.district_subject_rank_excel),


    # DISTRICT
    path("reports/district-d-trend-html/", views.district_d_trend_html),
    path("reports/district-d-trend-pdf/", views.district_d_trend_pdf),
    path("reports/district-trend-excel/", views.district_d_trend_excel),

    # WARD
    # path("reports/ward-trend-html/", views.ward_trend_html),
    # path("reports/ward-trend-pdf/", views.ward_trend_pdf),
    # path("reports/ward-trend-excel/", views.ward_trend_excel),

    # SCHOOL
    # path("reports/school-trend-html/", views.school_trend_html),
    # path("reports/school-trend-pdf/", views.school_trend_pdf),
    # path("reports/school-trend-excel/", views.school_trend_excel),






    path("reports/wardwise/", views.wardwise, name="wardwise"),
    path("reports/ward-summary-html/", views.ward_summary_html),
    # path("reports/ward-school-rank-html/", views.ward_school_ranking_html),
    # path("reports/ward-subject-summary/", views.ward_subject_summary_html),
    # path("reports/ward-trend-html/", views.ward_trend_html),
    # path("reports/ward-school-trend-html/", views.ward_school_trend_html),


    path("reports/ward-summary-pdf/", views.ward_summary_pdf),
    path("reports/ward-summary-excel/", views.ward_summary_excel),


    path(
        "reports/ward-school-rank-html/",
        views.ward_school_ranking_html,
        name="ward_school_ranking_html"
    ),
    path(
        "reports/ward-school-rank-pdf/",
        views.ward_school_ranking_pdf,
        name="ward_school_ranking_pdf"
    ),
    path(
        "reports/ward-school-rank-excel/",
        views.ward_school_ranking_excel,
        name="ward_school_ranking_excel"
    ),


    path(
        "reports/ward-subject-summary/",
        views.ward_subject_summary_html,
        name="ward_subject_summary_html"
    ),
    path(
        "reports/ward-subject-summary-pdf/",
        views.ward_subject_summary_pdf,
        name="ward_subject_summary_pdf"
    ),
    path(
        "reports/ward-subject-summary-excel/",
        views.ward_subject_summary_excel,
        name="ward_subject_summary_excel"
    ),


    path(
        "reports/ward-subject-school-rank/",
        views.ward_subject_school_ranking_html,
        name="ward_subject_school_ranking_html"
    ),
    path(
        "reports/ward-subject-school-rank-pdf/",
        views.ward_subject_school_ranking_pdf,
        name="ward_subject_school_ranking_pdf"
    ),
    path(
        "reports/ward-subject-school-rank-excel/",
        views.ward_subject_school_ranking_excel,
        name="ward_subject_school_ranking_excel"
    ),



   # SCHOOL
    path("reports/schoolwise/", views.schoolwise, name="schoolwise"),

    path("reports/school-summary-html/", views.school_summary_html),
    path("reports/school-summary-pdf/", views.school_summary_pdf),
    path("reports/school-summary-excel/", views.school_summary_excel, name="school_summary_excel"),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/project-summary/",
        views.project_school_summary_html,
        name="project_school_summary_html"
    ),
    path(
        "projects/<str:project_code>/school/<slug:school_code>/project-summary/print/",
        views.project_school_summary_print,
        name="project_school_summary_print"
    ),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/detailed-results/",
        views.project_school_detailed_results,
        name="project_school_detailed_results"
    ),

    path('projects/<str:project_code>/school/all/detailed-results/print/',
         views.project_all_schools_detailed_results_print,
         name='project_all_schools_detailed_results_print'),

    path('test-simple/', lambda request: HttpResponse('Simple test works'), name='test_simple'),

    path('test-standardize/<str:project_code>/', 
         lambda request, project_id: HttpResponse(f'Test with project {project_id} works'), 
         name='test_standardize'),

    # Subject Standardization List
    path('projects/<str:project_code>/standardize-subjects/',
         views.subject_standardization_list,
         name='subject_standardization_list'),


    path('projects/<str:project_code>/subject/<int:subject_id>/test-standardize/',
         views.test_standardize_endpoint,
         name='test_standardize_endpoint'),

    # Subject Standardization Modal Data
    path('projects/<str:project_code>/subject/<int:subject_id>/standardize-data/',
         views.subject_standardization_data,
         name='subject_standardization_data'),

    # Process Subject Standardization
    path('projects/<str:project_code>/subject/<int:subject_id>/standardize/',
         views.process_subject_standardization,
         name='process_subject_standardization'),

    # Subject Schools List
    path('projects/<str:project_code>/subject/<int:subject_id>/schools/',
         views.subject_schools_list,
         name='subject_schools_list'),

    # School Subject Standardization
    path('projects/<str:project_code>/subject/<int:subject_id>/school/<int:school_id>/standardize/',
         views.school_subject_standardization,
         name='school_subject_standardization'),

    # Standardization Progress
    path('projects/<str:project_code>/standardization-progress/<str:task_id>/',
         views.standardization_progress,
         name='standardization_progress'),

    path(
        "projects/<str:project_code>/school/<slug:school_code>/detailed-results/print/",
        views.project_school_detailed_results_print,
        name="project_school_detailed_results_print"
    ),

    path("reports/school-summary-html/", views.school_summary_html, name="view_html_summary"),



    path(
      "reports/school-subject-summary-html/",
      views.school_subject_summary_html, name="school_subject_summary_html"
    ),
    path(
      "reports/school-subject-summary-pdf/",
      views.school_subject_summary_pdf, name="school_subject_summary_pdf"
    ),


    path(
      "reports/school-subject-trend-print/",
      views.school_subject_trend_print,
      name="school_subject_trend_print"
    ),


    path(
      "reports/region-subject-trend-print/",
      views.region_subject_trend_print,
      name="region_subject_trend_print"
    ),

    path(
      "reports/district-subject-trend-print/",
      views.district_subject_trend_print,
      name="district_subject_trend_print"
    ),

    path(
      "reports/school-subject-summary-excel/",
      views.school_subject_summary_excel, name="school_subject_summary_excel"
    ),


    path("reports/school-trend-html/", views.school_trend_html),

    path("reports/school-subject-trend-html/", views.school_subject_trend_html, name="school_subject_trend_html"),


    path("reports/region-subject-trend-html/", views.region_subject_trend_html, name="region_subject_trend_html"),

    path("reports/district-subject-trend-html/", views.district_subject_trend_html, name="district_subject_trend_html"),

    path("reports/school-trend-pdf/", views.school_trend_pdf, name="school_trend_pdf"),
    path("reports/school-trend-excel/", views.school_trend_excel, name="school_trend_excel"),

    # exams/urls.py 
    path("bulk-uploads/", views.bulk_uploads_page, name="bulk_uploads"),
    path("bulk-upload/<str:target>/", views.bulk_upload_handler, name="bulk_upload_handler"),
    path("bulk-upload-delete/<str:target>/", views.bulk_upload_delete, name="bulk_upload_delete"),
    path("bulk-upload-sample/<str:target>/", views.bulk_upload_sample, name="bulk_upload_sample"),
 
    path("geo-import/", views.geo_import_upload, name="geo_import"),
    path('geo-import/generate-users/', generate_users_from_schools, name='generate_users_from_schools'),
    path("schools/<int:pk>/delete/", views.school_delete, name="school_delete"),
    path("schools/<int:pk>/edit/", views.school_edit, name="school_edit"),

    path(
        "schools/export-excel/",
        views.export_schools_excel,
        name="export_schools_excel"
    ),


    path("exam-types/", views.examtype_list, name="examtype_list"),
    path("exam-types/add/", views.examtype_create, name="examtype_add"),
    path("exam-types/<int:pk>/edit/", views.examtype_edit, name="examtype_edit"),
    path("exam-types/<int:pk>/delete/", views.examtype_delete, name="examtype_delete"),


    path("subjects/", views.subject_list, name="subject_list"),
    path("subjects/add/", views.subject_create, name="subject_add"),
    path("subjects/<int:pk>/edit/", views.subject_edit, name="subject_edit"),
    path("subjects/<int:pk>/delete/", views.subject_delete, name="subject_delete"),

    path(
        "subjects/bulk-upload/",
        views.subject_bulk_upload,
        name="subject_bulk_upload"
    ),


    path(
        "subjects/template/",
        views.subject_template_download,
        name="subject_template_download"
    ),


    path("reports/reg-subj-pdf/", views.region_subject_summary_pdf, name="reg_subject_pdf"),
    path("reports/reg-subj-excel/", views.region_subject_summary_excel, name="reg_subject_excel"),
    # ===============================
    # DASHBOARD API
    # ===============================
    path('ajax/dashboard-data/', views.ajax_dashboard_data, name='ajax_dashboard_data'),
    path('ajax/subject-dashboard-data/', views.ajax_dashboard_subjectwise, name='ajax_dashboard_subjectwise'),
    # ===============================
    # JWT
    # ===============================
    path('auth/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('auth/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),





















 
    # Academic Level
    path("levels/", views.academic_level_list, name="academic_level_list"),
    path("levels/add/", views.academic_level_add, name="academic_level_add"),

    # Projects
    path("projects/", views.project_list, name="project_list"),
    path("projects/add/", views.project_add, name="project_add"),
    path("projects/<int:pk>/edit/", views.project_edit, name="project_edit"),  # Add this line
    path("projects/<str:project_code>/toggle-status/", views.toggle_project_status, name="toggle_project_status"),
    path("projects/<str:project_code>/manage/", views.project_manage, name="project_manage"),
    path("projects/add/", views.project_add, name="project_add"),

    # Grading Rules
    path("grading-rules/", views.grading_rule_list, name="grading_rule_list"),
    path("grading-rules/add/", views.grading_rule_add, name="grading_rule_add"),

    # Division Rules
    path("division-rules/", views.division_rule_list, name="division_rule_list"),
    path("division-rules/add/", views.division_rule_add, name="division_rule_add"),

    # Scores
    path("scores/", views.score_list, name="score_list"),
    path("scores/add/", views.score_add, name="score_add"),


]

urlpatterns += [
    path(
        "results/",
        include(
            ("exams.public_urls", "public"),
            namespace="public",
        ),
    ),
]





# ===============================
# MEDIA SERVING (FIXED)
# ===============================
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
