use helios_persistence::advisor::{AdvisorConfig, AdvisorServer};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "info,helios_persistence=debug".into()),
)
.with(tracing_subscriber::fmt::layer())
.init();
let config = AdvisorConfig::from_env();
tracing::info!(
"Configuration Advisor starting on {}:{}",
config.host,
config.port
);
println!("\nAvailable endpoints:");
println!(" GET /health - Health check");
println!(" GET /backends - List backend types");
println!(" GET /backends/:kind - Backend capabilities");
println!(" POST /analyze - Analyze configuration");
println!(" POST /validate - Validate configuration");
println!(" POST /suggest - Get suggestions");
println!(" POST /simulate - Simulate query routing");
println!();
let server = AdvisorServer::new(config);
let shutdown_signal = async {
tokio::signal::ctrl_c()
.await
.expect("Failed to install CTRL+C signal handler");
tracing::info!("Shutdown signal received, stopping server...");
};
server.run_with_shutdown(shutdown_signal).await?;
tracing::info!("Server stopped");
Ok(())
}