use ratatui::text::{Line, Span};
use super::badges::badge_spans;
use super::status_hints::keybinding_spans;
use super::status_text::status_text_span;
use super::token_spans::{push_context_budget_span, push_throughput_span, push_token_spans};
use crate::tui::app::state::App;
pub const STACK_WIDTH_THRESHOLD: u16 = 180;
pub fn build_status_lines(app: &App, session_label: &str, width: u16) -> Vec<Line<'static>> {
let hints = keybinding_spans();
let badges = badge_spans(app, session_label);
let metrics = metric_spans(app);
if width >= STACK_WIDTH_THRESHOLD {
let mut combined = hints;
combined.push(Span::raw(" | "));
combined.extend(badges);
combined.push(Span::raw(" | "));
combined.extend(metrics);
vec![Line::from(combined)]
} else {
vec![Line::from(hints), Line::from(badges), Line::from(metrics)]
}
}
pub fn build_status_spans(app: &App, session_label: &str) -> Vec<Span<'static>> {
let mut spans = keybinding_spans();
spans.push(Span::raw(" | "));
spans.extend(badge_spans(app, session_label));
spans.push(Span::raw(" | "));
spans.extend(metric_spans(app));
spans
}
fn metric_spans(app: &App) -> Vec<Span<'static>> {
let mut spans = Vec::new();
push_token_spans(&mut spans);
push_context_budget_span(&mut spans, app);
push_throughput_span(&mut spans, app);
spans.push(Span::raw(" | "));
spans.push(status_text_span(app));
spans
}