from django.urls import path

from apps.smehub.linkage import views

app_name = "smehub_linkage"

urlpatterns = [
    # Hub landing — re-homes Partners / Providers / Regulatory / Connections / Recommendations (Slice B.2).
    path("", views.LinkageNetworkHubView.as_view(), name="hub"),

    # Directories — public browse
    path("directory/search/", views.DirectorySearchView.as_view(), name="directory_search"),
    path("partners/", views.PartnerDirectoryView.as_view(), name="partner_directory"),
    path("partners/<int:pk>/", views.PartnerDetailView.as_view(), name="partner_detail"),
    path("service-providers/", views.ServiceProviderListView.as_view(), name="service_provider_list"),
    path("service-providers/<int:pk>/", views.ServiceProviderDetailView.as_view(), name="service_provider_detail"),

    # Self-managed directory entries
    path("manage/partner/new/", views.PartnerEntryCreateView.as_view(), name="partner_entry_create"),
    path("manage/partner/<int:pk>/edit/", views.PartnerEntryUpdateView.as_view(), name="partner_entry_update"),
    path("manage/service-provider/new/", views.ServiceProviderCreateView.as_view(), name="service_provider_create"),
    path("manage/service-provider/<int:pk>/edit/", views.ServiceProviderUpdateView.as_view(), name="service_provider_update"),

    # Persona workspaces
    path("me/", views.ServiceProviderDashboardView.as_view(), name="service_provider_dashboard"),
    path("partner/me/", views.PartnerDashboardView.as_view(), name="partner_dashboard"),
    path("partner/me/connections/", views.PartnerConnectionInboxView.as_view(), name="partner_connection_inbox"),
    path("partner/me/mous/", views.PartnerMoUListView.as_view(), name="partner_mou_list"),

    # Admin directory + suggestion management
    path("admin/dashboard/", views.LinkageAdminDashboardView.as_view(), name="admin_dashboard"),
    path("admin/", views.AdminDirectoryListView.as_view(), name="admin_directory_management"),
    path("admin/<str:kind>/<int:pk>/verify/", views.directory_verify_view, name="directory_verify"),
    path("admin/<str:kind>/<int:pk>/reject/", views.directory_reject_view, name="directory_reject"),
    path("admin/<str:kind>/<int:pk>/deactivate/", views.directory_deactivate_view, name="directory_deactivate"),
    path("admin/<str:kind>/<int:pk>/reactivate/", views.directory_reactivate_view, name="directory_reactivate"),
    path("admin/recommendations/", views.OrganisationRecommendationsAdminView.as_view(), name="org_recommendations_admin"),
    path("admin/recommendations/<int:pk>/handle/", views.handle_recommendation_view, name="org_recommendation_handle"),
    path("suggest/", views.SuggestOrganisationView.as_view(), name="suggest_organisation"),

    # AI matchmaking
    path("recommendations/", views.AIRecommendationsView.as_view(), name="ai_recommendations"),
    path("recommendations/refresh/", views.refresh_recommendations_view, name="ai_recommendations_refresh"),

    # Connections
    path("connect/<str:kind>/<int:pk>/", views.RequestConnectionView.as_view(), name="connection_request"),
    path("connections/", views.MyConnectionsView.as_view(), name="my_connections"),
    path("connections/<int:pk>/decision/", views.ConnectionRequestDecisionView.as_view(), name="connection_request_decision"),
    path("connections/<int:pk>/withdraw/", views.connection_request_withdraw_view, name="connection_request_withdraw"),

    # MoU
    path("connections/<int:connection_pk>/mou/new/", views.MoUDraftView.as_view(), name="mou_draft"),
    path("mou/<int:pk>/", views.MoUWorkspaceView.as_view(), name="mou_workspace"),
    path("mou/<int:pk>/comment/", views.mou_comment_view, name="mou_comment"),
    path("mou/<int:pk>/submit-review/", views.mou_submit_review_view, name="mou_submit_review"),
    path("mou/<int:pk>/confirm/<str:party>/", views.MoUConfirmPartyView.as_view(), name="mou_confirm_party"),
    path("mou/<int:pk>/formalise/", views.MoUFormaliseView.as_view(), name="mou_formalise"),
    path("mou/<int:pk>/amend/", views.MoUAmendView.as_view(), name="mou_amend"),

    # Advisory bookings
    path("service-providers/<int:pk>/book/", views.AdvisoryBookingView.as_view(), name="advisory_booking"),
    path("manage/service-provider/<int:pk>/availability/", views.AdvisorySlotManageView.as_view(), name="advisory_slots"),
    path("manage/service-provider/<int:pk>/availability/<int:slot_pk>/delete/", views.AdvisorySlotDeleteView.as_view(), name="advisory_slot_delete"),
    path("advisory/", views.AdvisorySessionListView.as_view(), name="advisory_sessions"),
    path("advisory/<int:pk>/cancel/", views.AdvisorySessionCancelView.as_view(), name="advisory_cancel"),
    path("advisory/<int:pk>/complete/", views.AdvisorySessionCompleteView.as_view(), name="advisory_complete"),

    # Regulatory & Policy Navigation
    path("regulatory/", views.EntrepreneurRegulatoryBrowseView.as_view(), name="regulatory_browse"),
    path("admin/regulatory/", views.RegulatoryGuideListView.as_view(), name="regulatory_admin_list"),
    path("admin/regulatory/new/", views.RegulatoryGuideCreateView.as_view(), name="regulatory_admin_create"),
    path("admin/regulatory/<int:pk>/edit/", views.RegulatoryGuideUpdateView.as_view(), name="regulatory_admin_update"),
    path("admin/regulatory/<int:pk>/toggle/", views.regulatory_guide_toggle_active_view, name="regulatory_admin_toggle"),
]
