use anyhow::{Result, Context};
use colored::*;
use std::process::{Command, Stdio};
pub async fn handle(daemon: bool, port: u16, dev: bool) -> Result<()> {
println!("{}", "đ Starting Minifly Platform".blue().bold());
if dev {
println!("{}", "đ Development mode enabled".yellow());
}
if is_platform_running(port).await {
println!("{}", "â
Minifly platform is already running".green());
return Ok(());
}
start_api_server(port, daemon, dev).await?;
if !daemon {
println!();
println!("{}", "đ Minifly platform is now running!".green().bold());
println!(" âĸ API server: {}", format!("http://localhost:{}", port).cyan());
println!(" âĸ Web UI: {}", format!("http://localhost:{}/ui", port).cyan());
println!();
println!("Press Ctrl+C to stop the platform");
tokio::signal::ctrl_c().await
.context("Failed to wait for interrupt signal")?;
println!();
println!("{}", "đ Shutting down Minifly platform...".yellow());
}
Ok(())
}
async fn is_platform_running(port: u16) -> bool {
let client = reqwest::Client::new();
let url = format!("http://localhost:{}/health", port);
match client.get(&url).send().await {
Ok(response) => response.status().is_success(),
Err(_) => false,
}
}
async fn start_api_server(port: u16, daemon: bool, dev: bool) -> Result<()> {
println!("{}", "đ§ Starting API server...".blue());
if daemon {
println!("{}", "â ī¸ Daemon mode not yet implemented in standalone CLI".yellow());
println!("Please run the API server manually:");
} else {
println!("{}", "âšī¸ API server simulation".blue());
println!("In a full Minifly installation, this would start:");
}
println!(" âĸ Minifly API server on port {}", port);
println!(" âĸ Docker container management");
println!(" âĸ LiteFS integration");
if !daemon {
println!();
println!("{}", "đĄ To install the full Minifly platform:".yellow());
println!(" git clone https://github.com/minifly/minifly");
println!(" cd minifly");
println!(" cargo build --release");
println!(" ./target/release/minifly-api");
}
Ok(())
}