use crate::agent_app::AgentApp;
use crate::chat_app::ChatApp;
use anyhow::Result;
use perspt_core::GenAIProvider;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AppMode {
Chat,
Agent,
}
pub async fn run_chat_tui(provider: GenAIProvider, model: String) -> Result<()> {
use crossterm::event::{
DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, KeyboardEnhancementFlags,
PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
};
use ratatui::crossterm::execute;
use std::io::stdout;
execute!(stdout(), EnableMouseCapture)?;
execute!(stdout(), EnableBracketedPaste)?;
let _ = execute!(
stdout(),
PushKeyboardEnhancementFlags(
KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
| KeyboardEnhancementFlags::REPORT_EVENT_TYPES
)
);
let mut terminal = ratatui::init();
let mut app = ChatApp::new(provider, model);
let result = app.run(&mut terminal).await;
let _ = execute!(stdout(), PopKeyboardEnhancementFlags);
ratatui::restore();
execute!(stdout(), DisableMouseCapture)?;
result
}
pub fn run_agent_tui() -> std::io::Result<()> {
let mut terminal = ratatui::init();
let mut app = AgentApp::new();
use crate::task_tree::TaskStatus;
app.task_tree.add_task(
"root".to_string(),
"Implement authentication".to_string(),
0,
);
app.task_tree
.add_task("auth-1".to_string(), "Create JWT module".to_string(), 1);
app.task_tree
.add_task("auth-2".to_string(), "Add password hashing".to_string(), 1);
app.task_tree.update_status("root", TaskStatus::Running);
app.task_tree.update_status("auth-1", TaskStatus::Completed);
app.dashboard.total_nodes = 3;
app.dashboard.completed_nodes = 1;
app.dashboard.current_node = Some("auth-2".to_string());
app.dashboard.update_energy(0.5);
app.dashboard
.log("Started task: Implement authentication".to_string());
app.dashboard.log("OK: JWT module completed".to_string());
let result = app.run(&mut terminal);
ratatui::restore();
result
}
#[deprecated(note = "Use run_chat_tui or run_agent_tui instead")]
pub fn run_tui() -> Result<()> {
run_agent_tui().map_err(|e| anyhow::anyhow!("TUI error: {}", e))
}