use std::{path::PathBuf, sync::Arc};

use harmony::{
    inventory::Inventory,
    maestro::Maestro,
    modules::application::{RustWebapp, RustWebappScore, features::ContinuousDelivery},
    topology::{K8sAnywhereTopology, Url},
};

#[tokio::main]
async fn main() {
    env_logger::init();
    let application = RustWebapp {
        name: "harmony-example-rust-webapp".to_string(),
        project_root: PathBuf::from("./examples/rust/webapp"),
    };
    let app = RustWebappScore {
        name: "Example Rust Webapp".to_string(),
        domain: Url::Url(url::Url::parse("https://rustapp.harmony.example.com").unwrap()),
        features: vec![Box::new(ContinuousDelivery {
            application: Arc::new(application.clone()),
        })],
        application,
    };

    let topology = K8sAnywhereTopology::from_env();
    let mut maestro = Maestro::initialize(Inventory::autoload(), topology)
        .await
        .unwrap();
    maestro.register_all(vec![Box::new(app)]);
    harmony_cli::init(maestro, None).await.unwrap();
}
