use crate::components::common::QueueType;
use crate::components::common::{MessageActivityMsg, Msg};
use crate::components::messages::PaginationInfo;
pub fn create_toggle_message_selection(index: usize) -> Msg {
Msg::MessageActivity(MessageActivityMsg::ToggleMessageSelectionByIndex(index))
}
pub fn format_queue_display(info: &PaginationInfo) -> String {
let queue_name = info.queue_name.as_deref().unwrap_or("Unknown Queue");
match info.queue_type {
QueueType::Main => format!("📬 Messages ({queue_name}) [Main → d:DLQ]"),
QueueType::DeadLetter => {
format!("💀 Dead Letter Queue ({queue_name}) [DLQ → d:Main]")
}
}
}
pub fn format_bulk_info(info: &PaginationInfo) -> String {
if info.bulk_mode && info.selected_count > 0 {
format!("• {} selected", info.selected_count)
} else if info.bulk_mode {
"• Bulk mode".to_string()
} else {
"".to_string()
}
}
pub fn format_navigation_hints(info: &PaginationInfo) -> String {
let mut hints = Vec::new();
if info.has_previous_page {
hints.push("â—€[p]");
}
if info.has_next_page {
hints.push("[n]â–¶");
}
if hints.is_empty() {
"• End of pages".to_string()
} else {
format!("• {}", hints.join(" "))
}
}
pub fn format_pagination_status(info: &PaginationInfo) -> String {
let bulk_info = format_bulk_info(info);
let navigation_hints = format_navigation_hints(info);
if info.total_messages_loaded == 0 {
format!("No messages available {bulk_info}")
} else {
let base_status = format!(
"Page {}/{} • {} loaded • {} on page",
info.current_page + 1, info.total_pages_loaded.max(1),
info.total_messages_loaded,
info.current_page_size
);
let queue_info = if crate::config::get_config_or_panic().queue_stats_display_enabled() {
if let Some(total) = info.queue_total_messages {
if let Some(age) = info.queue_stats_age_seconds {
let config = crate::config::get_config_or_panic();
let age_threshold = config.ui().queue_stats_age_threshold_seconds() as i64;
if age < age_threshold {
format!(" • {total} in queue")
} else {
format!(" • ~{} in queue ({}m ago)", total, age / age_threshold)
}
} else {
format!(" • {total} in queue")
}
} else {
String::new()
}
} else {
String::new()
};
format!("{base_status}{queue_info} {navigation_hints} {bulk_info}")
}
}