use ratatui::{layout::Rect, Frame};
use std::any::Any;
use super::ToolStatus;
use crate::themes::Theme;
pub trait ConversationView: Send + 'static {
fn add_user_message(&mut self, content: String);
fn add_assistant_message(&mut self, content: String);
fn add_system_message(&mut self, content: String);
fn append_streaming(&mut self, text: &str);
fn complete_streaming(&mut self);
fn discard_streaming(&mut self);
fn is_streaming(&self) -> bool;
fn add_tool_message(&mut self, tool_use_id: &str, display_name: &str, display_title: &str);
fn update_tool_status(&mut self, tool_use_id: &str, status: ToolStatus);
fn scroll_up(&mut self);
fn scroll_down(&mut self);
fn enable_auto_scroll(&mut self);
fn render(&mut self, frame: &mut Frame, area: Rect, theme: &Theme, pending_status: Option<&str>);
fn step_spinner(&mut self);
fn save_state(&self) -> Box<dyn Any + Send>;
fn restore_state(&mut self, state: Box<dyn Any + Send>);
fn clear(&mut self);
}
pub type ConversationViewFactory = Box<dyn Fn() -> Box<dyn ConversationView> + Send + Sync>;