use super::{overrides::has_transport_flags, service::Service, store::Store, Overrides};
use crate::args::{Cli, Command};
use crate::tui::app::connection::Connection;
pub(crate) fn enabled(cli: &Cli) -> bool {
matches!(&cli.command, Some(Command::Tui { profile, no_profile: false, mstp_monitor: None, .. })
if profile.is_some() || !has_transport_flags(cli))
}
pub(crate) fn open(
cli: &Cli,
discover: impl FnOnce() -> Result<Store, String>,
) -> Result<Option<(Service, Connection)>, String> {
if !enabled(cli) {
return Ok(None);
}
let profile_name = match &cli.command {
Some(Command::Tui { profile, .. }) => profile.as_deref(),
_ => None,
};
let overrides = Overrides::from_cli(cli)?;
let service = Service::new(discover(), overrides);
let connection = select(&service, profile_name);
Ok(Some((service, connection)))
}
pub(crate) fn select(service: &Service, name: Option<&str>) -> Connection {
let mut connection = Connection::new(service.overrides.clone());
connection.reply(service.catalog());
if let Some(name) = name {
connection.reply(service.load(name));
} else if connection.error.is_none() {
match connection.names.as_slice() {
[name] => connection.reply(service.load(&name.clone())),
[] => connection.new_profile(),
_ => {}
}
}
connection
}