use crate::cli::audit::build_cli_audit_event;
use crate::cli::output::print_output;
use crate::internal::audit::{AuditEventType, AuditResultStatus};
use crate::internal::auth::HEALTH_READ;
use crate::internal::backend::IbkrBackend;
use crate::internal::domain::{BrokerSessionVisibility, GatewayError};
pub async fn status(backend: &dyn IbkrBackend, json: bool) -> Result<(), GatewayError> {
let status = backend.session_status().await?;
let _event = build_cli_audit_event(
"ibkr_backend_status",
HEALTH_READ,
AuditEventType::BackendSessionChecked,
AuditResultStatus::Completed,
);
if json {
return print_output(true, "", &status);
}
let human = format!("backend: {:?}\nstatus: {:?}", status.backend, status.status);
print_output(json, &human, &status)
}
pub async fn requirements(backend: &dyn IbkrBackend, json: bool) -> Result<(), GatewayError> {
let status = backend.session_status().await?;
let _event = build_cli_audit_event(
"ibkr_session_requirements",
HEALTH_READ,
AuditEventType::BackendSessionChecked,
AuditResultStatus::Completed,
);
if json {
return print_output(true, "", &status);
}
let human = match status.status {
BrokerSessionVisibility::Usable => "session: usable\nmanual_action: none".to_string(),
BrokerSessionVisibility::ManualActionRequired | BrokerSessionVisibility::Unavailable => {
format!(
"session: {:?}\nmanual_action: {}",
status.status,
status
.user_action
.as_deref()
.unwrap_or("Complete broker login manually")
)
}
};
print_output(json, &human, &status)
}