from django.urls import path

from apps.mel.indicators import views

app_name = "mel_indicators"

urlpatterns = [
    path("", views.IndicatorListView.as_view(), name="indicator_list"),
    path("audit-log/", views.ConsolidatedAuditLogView.as_view(), name="audit_log"),
    path("new/", views.IndicatorCreateView.as_view(), name="indicator_create"),
    path("data-entry/", views.DataEntryView.as_view(), name="data_entry"),
    # M&E SRS Table 65 — consolidated pending-validation queue.
    path("validation/", views.DataValidationQueueView.as_view(), name="validation_queue"),
    path("data-points/<int:pk>/verify/", views.DataPointVerifyView.as_view(), name="datapoint_verify"),
    path("data-points/<int:pk>/reject/", views.DataPointRejectView.as_view(), name="datapoint_reject"),
    path("data-points/<int:pk>/clarify/", views.DataPointClarifyView.as_view(), name="datapoint_clarify"),
    path("data-points/<int:pk>/resubmit/", views.DataPointResubmitView.as_view(), name="datapoint_resubmit"),
    # G10 — bulk CSV import (officer-only).
    path("data-points/import/", views.DataPointImportView.as_view(), name="data_point_import"),
    path(
        "data-points/import/template.csv",
        views.DataPointImportTemplateView.as_view(),
        name="data_point_import_template",
    ),
    path(
        "data-points/import/<str:batch_id>/errors.csv",
        views.DataPointImportErrorsCSVView.as_view(),
        name="data_point_import_errors",
    ),
    path("targets/new/", views.IndicatorTargetCreateView.as_view(), name="target_create"),
    path("targets/<int:pk>/edit/", views.IndicatorTargetUpdateView.as_view(), name="target_edit"),
    path("targets/<int:pk>/history/", views.IndicatorTargetHistoryView.as_view(), name="target_history"),
    path("logframes/", views.LogFrameListView.as_view(), name="logframe_list"),
    path("logframes/new/", views.LogFrameCreateView.as_view(), name="logframe_create"),
    path("logframes/<slug:slug>/edit/", views.LogFrameUpdateView.as_view(), name="logframe_edit"),
    path("logframes/<slug:slug>/", views.LogFrameDetailView.as_view(), name="logframe_detail"),
    path(
        "logframes/<slug:slug>/dashboard/",
        views.LogFrameDashboardView.as_view(),
        name="logframe_dashboard",
    ),
    # G6 — programme close-out + reopen.
    path(
        "logframes/<slug:slug>/close/",
        views.LogFrameCloseView.as_view(),
        name="logframe_close",
    ),
    path(
        "logframes/<slug:slug>/reopen/",
        views.LogFrameReopenView.as_view(),
        name="logframe_reopen",
    ),
    # M&E SRS — Results Framework approval workflow.
    path(
        "logframes/<slug:slug>/submit/",
        views.LogFrameSubmitView.as_view(),
        name="logframe_submit",
    ),
    path(
        "logframes/<slug:slug>/approve/",
        views.LogFrameApproveView.as_view(),
        name="logframe_approve",
    ),
    # G13 — alert escalation rules + cross-system escalation list.
    path(
        "logframes/<slug:slug>/escalation/",
        views.AlertEscalationRuleUpdateView.as_view(),
        name="escalation_rule_edit",
    ),
    path(
        "alerts/escalations/",
        views.AlertEscalationListView.as_view(),
        name="escalation_list",
    ),
    path(
        "alerts/escalations/<int:pk>/ack/",
        views.AlertEscalationAcknowledgeView.as_view(),
        name="escalation_ack",
    ),
    path("logframes/rows/new/", views.LogFrameRowCreateView.as_view(), name="logframe_row_create"),
    path(
        "logframes/rows/<int:pk>/edit/",
        views.LogFrameRowUpdateView.as_view(),
        name="logframe_row_edit",
    ),
    path("outcomes/", views.OutcomeAssessmentListView.as_view(), name="outcome_list"),
    path("outcomes/new/", views.OutcomeAssessmentCreateView.as_view(), name="outcome_create"),
    path("outcomes/<int:pk>/", views.OutcomeAssessmentDetailView.as_view(), name="outcome_detail"),
    path("outcomes/<int:pk>/edit/", views.OutcomeAssessmentUpdateView.as_view(), name="outcome_edit"),
    path("outcomes/<int:pk>/history/", views.OutcomeAssessmentHistoryView.as_view(), name="outcome_history"),
    path("impacts/", views.ImpactEvaluationListView.as_view(), name="impact_list"),
    path("impacts/new/", views.ImpactEvaluationCreateView.as_view(), name="impact_create"),
    path("impacts/<int:pk>/", views.ImpactEvaluationDetailView.as_view(), name="impact_detail"),
    path("impacts/<int:pk>/edit/", views.ImpactEvaluationUpdateView.as_view(), name="impact_edit"),
    path("impacts/<int:pk>/history/", views.ImpactEvaluationHistoryView.as_view(), name="impact_history"),
    path(
        "impacts/<int:evaluation_pk>/datapoints/new/",
        views.ImpactDatapointCreateView.as_view(),
        name="impact_datapoint_create",
    ),
    path(
        "impacts/<int:evaluation_pk>/datapoints/<int:pk>/delete/",
        views.ImpactDatapointDeleteView.as_view(),
        name="impact_datapoint_delete",
    ),
    path("<slug:code>/", views.IndicatorDetailView.as_view(), name="indicator_detail"),
    path("<slug:code>/edit/", views.IndicatorUpdateView.as_view(), name="indicator_edit"),
    # M&E SRS Tables 63-64 — disaggregation + draft publish.
    path(
        "<slug:code>/disaggregation/",
        views.IndicatorDisaggregationView.as_view(),
        name="indicator_disaggregation",
    ),
    path(
        "<slug:code>/disaggregation/<int:pk>/values/",
        views.DisaggregationValuesView.as_view(),
        name="disaggregation_values",
    ),
    path(
        "<slug:code>/disaggregation/<int:pk>/delete/",
        views.DisaggregationCategoryDeleteView.as_view(),
        name="disaggregation_category_delete",
    ),
    path(
        "<slug:code>/publish/",
        views.IndicatorPublishView.as_view(),
        name="indicator_publish",
    ),
    path("<slug:code>/variance/", views.IndicatorVarianceView.as_view(), name="indicator_variance"),
    path(
        "<slug:code>/variance/refresh/",
        views.IndicatorVarianceRefreshView.as_view(),
        name="indicator_variance_refresh",
    ),
    # G21 — polymorphic evidence attachments (officer-only).
    path(
        "evidence/<int:ct_id>/<int:obj_id>/upload/",
        views.EvidenceAttachmentUploadView.as_view(),
        name="evidence_upload",
    ),
    path(
        "evidence/<int:att_pk>/delete/",
        views.EvidenceAttachmentDeleteView.as_view(),
        name="evidence_delete",
    ),
    # G9 — validation rule CRUD (officer-only).
    path(
        "<slug:code>/rules/add/",
        views.ValidationRuleCreateView.as_view(),
        name="validation_rule_create",
    ),
    path(
        "rules/<int:rule_pk>/toggle/",
        views.ValidationRuleToggleView.as_view(),
        name="validation_rule_toggle",
    ),
    path(
        "rules/<int:rule_pk>/delete/",
        views.ValidationRuleDeleteView.as_view(),
        name="validation_rule_delete",
    ),
]
