from django.urls import path

from apps.repository.documents import views

app_name = "repo_documents"

urlpatterns = [
    path("", views.BrowseView.as_view(), name="browse"),
    path("browse/regions/", views.BrowseByRegionView.as_view(), name="browse_regions"),
    path("browse/countries/", views.BrowseByCountryView.as_view(), name="browse_countries"),
    path("browse/subjects/", views.BrowseBySubjectView.as_view(), name="browse_subjects"),
    path("browse/conferences/", views.BrowseByConferenceView.as_view(), name="browse_conferences"),
    path("browse/institutions/", views.BrowseByInstitutionView.as_view(), name="browse_institutions"),
    path("browse/authors/", views.BrowseByAuthorView.as_view(), name="browse_authors"),
    path("submit/", views.DocumentSubmitView.as_view(), name="submit"),
    # REPO-SP2 wizard typeahead / suggestion endpoints
    path("submit/authors/search/", views.AuthorSearchView.as_view(), name="author_search"),
    path("submit/keywords/search/", views.KeywordSearchView.as_view(), name="keyword_search"),
    path("submit/classify/suggest/", views.ClassificationSuggestView.as_view(), name="classify_suggest"),
    path("submit/staged-upload/", views.StagedUploadView.as_view(), name="staged_upload"),
    # FRREP-DCI004 — resumable / chunked upload pipeline
    path("submit/resumable/start/", views.ResumableStartView.as_view(), name="resumable_start"),
    path("submit/resumable/chunk/", views.ResumableChunkView.as_view(), name="resumable_chunk"),
    path("submit/resumable/finalize/", views.ResumableFinalizeView.as_view(), name="resumable_finalize"),
    path("submit/resumable/abort/", views.ResumableAbortView.as_view(), name="resumable_abort"),
    path("documents/<uuid:uid>/", views.DocumentDetailView.as_view(), name="document_detail"),
    path("documents/<uuid:uid>/edit/", views.DocumentEditView.as_view(), name="document_edit"),
    # FRREP-SR007 — inline reader + the raw byte stream that backs the PDF viewer.
    path("documents/<uuid:uid>/read/", views.DocumentReadView.as_view(), name="document_read"),
    path("documents/<uuid:uid>/raw/", views.DocumentRawView.as_view(), name="document_raw"),
    path("documents/<uuid:uid>/download/", views.DocumentDownloadView.as_view(), name="document_download"),
    path("documents/<uuid:uid>/withdraw/", views.WithdrawDocumentView.as_view(), name="document_withdraw"),
    path("documents/<uuid:uid>/reinstate/", views.ReinstateDocumentView.as_view(), name="document_reinstate"),
    path("documents/<uuid:uid>/versions/", views.VersionListView.as_view(), name="document_versions"),
    path("documents/<uuid:uid>/versions/<int:pk>/download/", views.VersionDownloadView.as_view(), name="document_version_download"),
    path("documents/<uuid:uid>/versions/upload/", views.VersionUploadView.as_view(), name="document_version_upload"),
    path("documents/<uuid:uid>/ai-insights/<int:pk>/decide/", views.AIInsightDecideView.as_view(), name="ai_insight_decide"),
    path("documents/<uuid:uid>/save/", views.DocumentSaveView.as_view(), name="document_save"),
    path("documents/<uuid:uid>/unsave/", views.DocumentUnsaveView.as_view(), name="document_unsave"),
    path("documents/<uuid:uid>/share/", views.ShareDocumentView.as_view(), name="document_share"),
    path("shares/<int:share_id>/revoke/", views.RevokeShareView.as_view(), name="share_revoke"),
    path("documents/<uuid:uid>/comments/", views.CommentCreateView.as_view(), name="comment_create"),
    path("documents/<uuid:uid>/comments/<int:comment_id>/resolve/", views.CommentResolveView.as_view(), name="comment_resolve"),
    path("documents/<uuid:uid>/comments/<int:comment_id>/reopen/", views.CommentReopenView.as_view(), name="comment_reopen"),
    path("documents/<uuid:uid>/review-tasks/", views.ReviewTaskListView.as_view(), name="review_task_list"),
    path("documents/<uuid:uid>/review-tasks/new/", views.ReviewTaskCreateView.as_view(), name="review_task_create"),
    path(
        "documents/<uuid:uid>/review-tasks/<int:pk>/status/",
        views.ReviewTaskUpdateStatusView.as_view(),
        name="review_task_update_status",
    ),
    # FRREP-INT006 — tracked redirect for REP-originated OER access.
    path("documents/<uuid:uid>/oer-access/", views.OERAccessRedirectView.as_view(), name="oer_access"),
    path("documents/<uuid:uid>/access/request/", views.AccessRequestCreateView.as_view(), name="access_request_create"),
    path("manage/access-requests/", views.AccessRequestQueueView.as_view(), name="access_request_queue"),
    path("manage/access-requests/<int:pk>/<str:decision>/", views.AccessRequestDecideView.as_view(), name="access_request_decide"),
    path("manage/qa-queue/", views.QAQueueView.as_view(), name="qa_queue"),
    path("manage/qa/<int:pk>/review/", views.QAReviewView.as_view(), name="qa_review"),
    # SP6 two-tier review (2026-07 interviews) — reviewer recommendation +
    # Publication Assistant compliance check.
    path("manage/qa/<int:pk>/recommend/", views.QARecommendView.as_view(), name="qa_recommend"),
    path("manage/qa/<int:pk>/compliance/", views.QAComplianceView.as_view(), name="qa_compliance"),
    # REPO-SP4 — denied-access review trail for Repository Administrators.
    path("manage/access-violations/", views.AccessViolationListView.as_view(), name="access_violation_list"),
    path("manage/keywords/", views.KeywordListView.as_view(), name="keyword_list"),
    path("manage/keywords/<int:pk>/decide/", views.KeywordDecideView.as_view(), name="keyword_decide"),
    path("collections/", views.CollectionListView.as_view(), name="collection_list"),
    path("collections/<slug:slug>/", views.CollectionDetailView.as_view(), name="collection_detail"),
    path("manage/collections/new/", views.CollectionCreateView.as_view(), name="collection_create"),
    path("manage/collections/<slug:slug>/edit/", views.CollectionUpdateView.as_view(), name="collection_update"),
    # FRREP-AC005 — group-based access grants per collection
    path(
        "manage/collections/<slug:slug>/access/",
        views.CollectionAccessView.as_view(),
        name="collection_access",
    ),
    path(
        "manage/collections/<slug:slug>/access/<int:pk>/update/",
        views.CollectionAccessUpdateView.as_view(),
        name="collection_access_update",
    ),
    path(
        "manage/collections/<slug:slug>/access/<int:pk>/revoke/",
        views.CollectionAccessRevokeView.as_view(),
        name="collection_access_revoke",
    ),
    # FRREP-AC005 — in-app group creation + membership management
    path("manage/groups/", views.GroupManageView.as_view(), name="group_manage"),
    path(
        "manage/groups/<int:pk>/members/add/",
        views.GroupMemberAddView.as_view(),
        name="group_member_add",
    ),
    path(
        "manage/groups/<int:pk>/members/<int:user_id>/remove/",
        views.GroupMemberRemoveView.as_view(),
        name="group_member_remove",
    ),
    # FRREP-MCL004 — Author merge wizard
    path(
        "manage/authors/merge/",
        views.AuthorMergeView.as_view(),
        name="author_merge",
    ),
    # FRREP-MCL012 — Collection merge + rename wizards
    path(
        "manage/collections/merge/",
        views.CollectionMergeView.as_view(),
        name="collection_merge",
    ),
    path(
        "manage/collections/<slug:slug>/rename/",
        views.CollectionRenameView.as_view(),
        name="collection_rename",
    ),
    path(
        "manage/collections/<slug:slug>/deprecate/",
        views.CollectionDeprecateView.as_view(),
        name="collection_deprecate",
    ),
    path("saved-searches/", views.SavedSearchListView.as_view(), name="saved_search_list"),
    path("saved-searches/new/", views.SavedSearchCreateView.as_view(), name="saved_search_create"),
    path("saved-searches/<int:pk>/delete/", views.SavedSearchDeleteView.as_view(), name="saved_search_delete"),
    path("documents/saved/", views.MyBookmarksListView.as_view(), name="my_bookmarks"),
]
