use std::path::Path;
use std::sync::Arc;
use tokio::sync::mpsc;
use crate::provider::ProviderRegistry;
use crate::session::{Session, SessionEvent};
use crate::tui::app::input::{dispatch_prompt, push_user_messages};
use crate::tui::app::state::App;
use crate::tui::worker_bridge::TuiWorkerBridge;
pub(super) async fn auto_drain_queued_input(
app: &mut App,
cwd: &Path,
session: &mut Session,
registry: &Option<Arc<ProviderRegistry>>,
worker_bridge: &Option<TuiWorkerBridge>,
event_tx: &mpsc::Sender<SessionEvent>,
result_tx: &mpsc::Sender<anyhow::Result<Session>>,
) {
if app.state.processing {
return;
}
if app.state.queued_steering.is_empty() {
return;
}
let prompt = std::mem::take(&mut app.state.queued_steering).join("\n\n");
let trimmed = prompt.trim().to_string();
let pending_images = std::mem::take(&mut app.state.pending_images);
if trimmed.is_empty() && pending_images.is_empty() {
return;
}
push_user_messages(app, &trimmed, &pending_images);
app.state.status = "Submitting queued message…".to_string();
dispatch_prompt(
app,
cwd,
session,
registry,
worker_bridge,
&trimmed,
pending_images,
event_tx,
result_tx,
)
.await;
}