Documentation
use crate::config;
use crate::context::Context;
use axum::extract::State;
use axum::routing::get;
use axum::{Json, Router};
use rseata_core::event::event::TransactionEvent;
use std::sync::Arc;

pub(crate) async fn start(ctx: Arc<Context>) -> anyhow::Result<()> {
    let ip_prot = format!(
        "{}:{}",
        config::get_env_web_server_ip(),
        config::get_env_web_server_prot()
    );
    let app = Router::new()
        .route("/audit_logger", get(audit_logger))
        .route("/", get(|| async { "Hello, World!" }))
        .with_state(ctx);
    tracing::info!("Server started on {}", &ip_prot);
    let listener = tokio::net::TcpListener::bind(ip_prot).await?;
    axum::serve(listener, app).await?;
    Ok(())
}

async fn audit_logger(state: State<Arc<Context>>) -> Json<Vec<TransactionEvent>> {
    let v = { state.audit_logger.log.lock().await.clone() };
    Json::from(v)
}