//! REST API endpoints for WiFi-DensePose MAT disaster response monitoring.
//!
//! This module provides a complete REST API and WebSocket interface for
//! managing disaster events, zones, survivors, and alerts in real-time.
//!
//! ## Endpoints
//!
//! ### Disaster Events
//! - `GET /api/v1/mat/events` - List all disaster events
//! - `POST /api/v1/mat/events` - Create new disaster event
//! - `GET /api/v1/mat/events/{id}` - Get event details
//!
//! ### Zones
//! - `GET /api/v1/mat/events/{id}/zones` - List zones for event
//! - `POST /api/v1/mat/events/{id}/zones` - Add zone to event
//!
//! ### Survivors
//! - `GET /api/v1/mat/events/{id}/survivors` - List survivors in event
//!
//! ### Alerts
//! - `GET /api/v1/mat/events/{id}/alerts` - List alerts for event
//! - `POST /api/v1/mat/alerts/{id}/acknowledge` - Acknowledge alert
//!
//! ### Scan Control
//! - `POST /api/v1/mat/scan/csi` - Push raw CSI data into detection pipeline
//! - `POST /api/v1/mat/scan/control` - Start/stop/pause/resume scanning
//! - `GET /api/v1/mat/scan/status` - Get detection pipeline status
//!
//! ### Domain Events
//! - `GET /api/v1/mat/events/domain` - List domain events from event store
//!
//! ### WebSocket
//! - `WS /ws/mat/stream` - Real-time survivor and alert stream

pub mod dto;
pub mod error;
pub mod handlers;
pub mod state;
pub mod websocket;

use axum::{
    routing::{get, post},
    Router,
};

pub use dto::*;
pub use error::ApiError;
pub use state::AppState;

/// Create the MAT API router with all endpoints.
///
/// # Example
///
/// ```rust,no_run
/// use wifi_densepose_mat::api::{create_router, AppState};
///
/// #[tokio::main]
/// async fn main() {
///     let state = AppState::new();
///     let app = create_router(state);
///     // ... serve with axum
/// }
/// ```
pub fn create_router(state: AppState) -> Router {
    Router::new()
        // Event endpoints
        .route(
            "/api/v1/mat/events",
            get(handlers::list_events).post(handlers::create_event),
        )
        .route("/api/v1/mat/events/:event_id", get(handlers::get_event))
        // Zone endpoints
        .route(
            "/api/v1/mat/events/:event_id/zones",
            get(handlers::list_zones).post(handlers::add_zone),
        )
        // Survivor endpoints
        .route(
            "/api/v1/mat/events/:event_id/survivors",
            get(handlers::list_survivors),
        )
        // Alert endpoints
        .route(
            "/api/v1/mat/events/:event_id/alerts",
            get(handlers::list_alerts),
        )
        .route(
            "/api/v1/mat/alerts/:alert_id/acknowledge",
            post(handlers::acknowledge_alert),
        )
        // Scan control endpoints (ADR-001: CSI data ingestion + pipeline control)
        .route("/api/v1/mat/scan/csi", post(handlers::push_csi_data))
        .route("/api/v1/mat/scan/control", post(handlers::scan_control))
        .route("/api/v1/mat/scan/status", get(handlers::pipeline_status))
        // Domain event store endpoint
        .route(
            "/api/v1/mat/events/domain",
            get(handlers::list_domain_events),
        )
        // WebSocket endpoint
        .route("/ws/mat/stream", get(websocket::ws_handler))
        .with_state(state)
}
