use crate::app::AppState;
use crate::ui::style::{self, Emphasis};
use crate::palette::filter::ScoredCommand;
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::widgets::{Block, Borders, Paragraph};
use ratatui::text::{Line, Span};
use ratatui::style::Modifier;
use super::utils::category_color;
pub fn render_preview(
frame: &mut Frame,
area: Rect,
state: &AppState,
scored: &ScoredCommand,
) {
let cmd = scored.command;
let preview_lines = vec![
Line::from(vec![
Span::styled("Command: ", style::text(&state.theme, Emphasis::Header)),
Span::styled(cmd.name, style::text(&state.theme, Emphasis::Normal).add_modifier(Modifier::BOLD)),
]),
Line::from(vec![
Span::styled("Shortcut: ", style::text(&state.theme, Emphasis::Header)),
Span::styled(
format!("[{}]", cmd.key),
style::text(&state.theme, Emphasis::Muted).add_modifier(Modifier::BOLD),
),
]),
Line::from(vec![
Span::styled("Description: ", style::text(&state.theme, Emphasis::Header)),
Span::styled(cmd.description, style::text(&state.theme, Emphasis::Normal)),
]),
Line::from(vec![
Span::styled("Category: ", style::text(&state.theme, Emphasis::Header)),
Span::styled(
format!("{:?}", cmd.category),
category_color(&cmd.category, &state.theme),
),
]),
];
let block = Block::default()
.borders(Borders::TOP)
.border_style(style::border(&state.theme, false))
.title("Preview");
let paragraph = Paragraph::new(preview_lines)
.block(block)
.style(style::body_style(&state.theme));
frame.render_widget(paragraph, area);
}
pub fn render_custom_preview(
frame: &mut Frame,
area: Rect,
state: &AppState,
name: &str,
command: &str,
) {
let lines = vec![
Line::from(vec![
Span::styled("Custom Command", style::text(&state.theme, Emphasis::Header)),
]),
Line::from(""),
Line::from(vec![
Span::styled("Name: ", style::text(&state.theme, Emphasis::Muted)),
Span::styled(name, style::text(&state.theme, Emphasis::Normal)),
]),
Line::from(vec![
Span::styled("Command: ", style::text(&state.theme, Emphasis::Muted)),
Span::styled(command, style::text(&state.theme, Emphasis::Normal)),
]),
];
let paragraph = Paragraph::new(lines)
.style(style::text(&state.theme, Emphasis::Normal))
.block(style::pane_block(&state.theme, "Preview", false));
frame.render_widget(paragraph, area);
}