"""Aggregate DRF router for ``/mel/api/v1/``.

Registers read-only ViewSets across every submodule. Mutating operations
still flow through the service layer (HTML forms or domain-specific POST
endpoints) so that idempotency, signal emission, and audit trails stay
consistent.
"""
from rest_framework.routers import DefaultRouter

from apps.mel.feedback.api import (
    CourseEvaluationViewSet,
    FeedbackChannelViewSet,
    FeedbackSubmissionViewSet,
    TracerResponseViewSet,
    TracerStudyViewSet,
)
from apps.mel.indicators.api import (
    DataPointViewSet,
    IndicatorTargetViewSet,
    IndicatorViewSet,
    LogFrameRowViewSet,
    LogFrameViewSet,
)
from apps.mel.reports.api import (
    ComplianceAlertViewSet,
    ReportArtifactViewSet,
    ReportDistributionViewSet,
    ReportTemplateViewSet,
    ReportViewSet,
)
from apps.mel.tracking.api import (
    ActivityDependencyViewSet,
    ActivityViewSet,
    CorrectiveActionViewSet,
    OutputDeliverableViewSet,
    UpstreamEventViewSet,
)

router = DefaultRouter()

# Indicators
router.register(r"logframes", LogFrameViewSet, basename="api-logframe")
router.register(r"logframe-rows", LogFrameRowViewSet, basename="api-logframe-row")
router.register(r"indicators", IndicatorViewSet, basename="api-indicator")
router.register(r"indicator-targets", IndicatorTargetViewSet, basename="api-indicator-target")
router.register(r"data-points", DataPointViewSet, basename="api-data-point")

# Tracking
router.register(r"events", UpstreamEventViewSet, basename="api-event")
router.register(r"activities", ActivityViewSet, basename="api-activity")
router.register(
    r"activity-dependencies", ActivityDependencyViewSet, basename="api-activity-dep",
)
router.register(r"outputs", OutputDeliverableViewSet, basename="api-output")
router.register(
    r"corrective-actions", CorrectiveActionViewSet, basename="api-corrective-action",
)

# Reports
router.register(r"report-templates", ReportTemplateViewSet, basename="api-report-template")
router.register(r"reports", ReportViewSet, basename="api-report")
router.register(r"report-artifacts", ReportArtifactViewSet, basename="api-report-artifact")
router.register(
    r"report-distributions", ReportDistributionViewSet, basename="api-report-distribution",
)
router.register(r"compliance-alerts", ComplianceAlertViewSet, basename="api-compliance-alert")

# Feedback
router.register(r"feedback-channels", FeedbackChannelViewSet, basename="api-feedback-channel")
router.register(
    r"feedback-submissions", FeedbackSubmissionViewSet, basename="api-feedback-submission",
)
router.register(r"tracer-studies", TracerStudyViewSet, basename="api-tracer-study")
router.register(r"tracer-responses", TracerResponseViewSet, basename="api-tracer-response")
router.register(
    r"course-evaluations", CourseEvaluationViewSet, basename="api-course-evaluation",
)
