use super::*;
const ROWS: usize = 3;
pub(in crate::tui::ui) fn render_referral_choice_modal(
f: &mut Frame,
area: ratatui::layout::Rect,
trading: &TradingState,
) {
let s = strings();
let popup_h: u16 = 16.min(area.height.saturating_sub(2));
let popup_w: u16 = 84.min(area.width.saturating_sub(4));
let x = area.x + (area.width.saturating_sub(popup_w)) / 2;
let y = area.y + (area.height.saturating_sub(popup_h)) / 2;
let popup_area = ratatui::layout::Rect::new(x, y, popup_w, popup_h);
f.render_widget(ratatui::widgets::Clear, popup_area);
let bold_white = Style::default()
.fg(Color::White)
.add_modifier(Modifier::BOLD);
let bold_orange = Style::default()
.fg(FIRE_ORANGE)
.add_modifier(Modifier::BOLD);
let title = Line::from(vec![
Span::raw(" 🐦🔥 "),
Span::styled(s.referral_choice_title_prefix, bold_white),
Span::styled("Phoenix", bold_orange),
Span::styled(format!("{} ", s.referral_choice_title_suffix), bold_white),
]);
let footer = Line::from(vec![
Span::styled(
" ↑↓ ",
Style::default()
.fg(Color::Cyan)
.add_modifier(Modifier::BOLD),
),
Span::styled(
format!("{} ", s.referral_choice_nav),
Style::default().fg(Color::DarkGray),
),
Span::styled(
"Enter ",
Style::default()
.fg(Color::Cyan)
.add_modifier(Modifier::BOLD),
),
Span::styled(
format!("{} ", s.referral_choice_action),
Style::default().fg(Color::DarkGray),
),
Span::styled(
"Esc ",
Style::default()
.fg(Color::Cyan)
.add_modifier(Modifier::BOLD),
),
Span::styled(
format!("{} ", s.cancel),
Style::default().fg(Color::DarkGray),
),
])
.left_aligned();
let block = Block::default()
.title(title)
.title_bottom(footer)
.borders(Borders::ALL)
.border_style(Style::default().fg(MODAL_BORDER));
let inner = block.inner(popup_area);
f.render_widget(block, popup_area);
let constraints = [
Constraint::Length(2), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Length(1), Constraint::Min(0),
];
let rows = Layout::default()
.direction(Direction::Vertical)
.constraints(constraints)
.split(inner);
f.render_widget(
Paragraph::new(Line::from(Span::styled(
format!(" {}", s.referral_choice_intro),
Style::default().fg(Color::Gray),
))),
rows[0],
);
let labels: [&str; ROWS] = [
s.referral_choice_cosmic,
s.referral_choice_custom,
s.referral_choice_skip,
];
let row_indices = [1usize, 4, 6];
let selected = trading.referral_choice_index.min(ROWS - 1);
for (i, label) in labels.iter().enumerate() {
let is_selected = i == selected;
let marker = if is_selected { "▶ " } else { " " };
let style = if is_selected {
Style::default()
.fg(Color::White)
.bg(MODAL_HIGHLIGHT_BG)
.add_modifier(Modifier::BOLD)
} else {
Style::default().fg(Color::Gray)
};
f.render_widget(
Paragraph::new(Line::from(vec![
Span::raw(" "),
Span::styled(marker, style),
Span::styled(label.to_string(), style),
])),
rows[row_indices[i]],
);
}
f.render_widget(
Paragraph::new(Line::from(Span::styled(
format!(" {}", s.referral_choice_cosmic_note),
Style::default()
.fg(Color::DarkGray)
.add_modifier(Modifier::ITALIC),
))),
rows[2],
);
f.render_widget(
Paragraph::new(Line::from(Span::styled(
format!(" {}", s.referral_choice_sticky_note),
Style::default()
.fg(Color::Rgb(180, 130, 60))
.add_modifier(Modifier::ITALIC),
))),
rows[8],
);
}