use std::sync::Arc;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use zk402_facilitator::{StaticRegistry, ZkSettleFacilitator};
use zk402_facilitator_http::app_router;
use zk402_groth16::proof_system::Groth16ProofSystem;
#[tokio::main]
async fn main() {
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "zk402_facilitator_http=debug,tower_http=debug".into()),
)
.with(tracing_subscriber::fmt::layer())
.init();
let registry = StaticRegistry::new();
let facilitator = Arc::new(ZkSettleFacilitator::<Groth16ProofSystem, _>::new(registry));
let app = app_router(facilitator);
let port = std::env::var("PORT")
.ok()
.and_then(|p| p.parse().ok())
.unwrap_or(3000);
let addr = format!("0.0.0.0:{}", port);
tracing::info!("zk402 facilitator listening on {}", addr);
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app).await.unwrap();
}