pub mod services;
use std::time::Duration;
use tari_service_framework::StackBuilder;
use tari_shutdown::Shutdown;
use tokio::time::sleep;
use crate::services::{ServiceAHandle, ServiceAInitializer, ServiceBHandle, ServiceBInitializer};
#[tokio::main]
#[allow(clippy::similar_names)]
async fn main() {
let mut shutdown = Shutdown::new();
let fut = StackBuilder::new(shutdown.to_signal())
.add_initializer(ServiceAInitializer::new("Service A response: ".to_string()))
.add_initializer(ServiceBInitializer::new("Service B response: ".to_string()))
.build();
let handles = fut.await.expect("Should get the ServiceHandles from this stack ");
let mut service_a_handle = handles.expect_handle::<ServiceAHandle>();
let mut service_b_handle = handles.expect_handle::<ServiceBHandle>();
sleep(Duration::from_secs(1)).await;
println!("----------------------------------------------------");
let response_b = service_b_handle.send_msg("Hello B".to_string()).await;
println!("Response from Service B: {response_b}");
println!("----------------------------------------------------");
let response_a = service_a_handle.send_msg("Hello A".to_string()).await;
println!("Response from Service A: {response_a}");
println!("----------------------------------------------------");
shutdown.trigger();
sleep(Duration::from_secs(5)).await;
}