use anyhow::Result;
use crate::multiplexer::{create_backend, detect_backend};
use crate::state::StateStore;
pub fn run() -> Result<()> {
let mux = create_backend(detect_backend());
let store = StateStore::new()?;
let agents = store
.load_reconciled_agents(mux.as_ref())
.unwrap_or_default();
let settings = store.load_settings()?;
let Some(target_pane_id) = settings.last_pane_id else {
println!("No previous agent to switch to");
return Ok(());
};
if !agents.iter().any(|a| a.pane_id == target_pane_id) {
println!("Last agent pane no longer exists");
return Ok(());
}
let current_pane = mux.active_pane_id();
if current_pane.as_deref() == Some(target_pane_id.as_str()) {
println!("Already at last agent");
return Ok(());
}
let window_hint = agents
.iter()
.find(|a| a.pane_id == target_pane_id)
.map(|a| a.window_name.as_str());
if mux.switch_to_pane(&target_pane_id, window_hint).is_err() {
println!("Failed to switch to last agent");
return Ok(());
}
if let Some(ref current) = current_pane
&& agents.iter().any(|a| a.pane_id == *current)
{
let mut settings = store.load_settings()?;
settings.last_pane_id = Some(current.clone());
store.save_settings(&settings)?;
}
Ok(())
}