laziergit 1.0.0

an even lazier git implementation than lazygit
use crate::app::App;
use crate::theme;
use ratatui::{
    Frame,
    layout::Rect,
    style::{Modifier, Style},
    text::{Line, Span},
    widgets::Paragraph,
};

const CHIPS: &[(&str, &str)] = &[
    ("j/k", "move"),
    ("space", "stage"),
    ("enter", "open"),
    ("c", "commit"),
    ("p", "pull"),
    ("P", "push"),
    ("b", "branch"),
    ("?", "help"),
];

pub fn header(f: &mut Frame, area: Rect, app: &App) {
    let branch = &app.status.branch;
    let mut spans = vec![Span::styled(
        format!(" {} ", branch.name),
        Style::new()
            .fg(theme::BASE)
            .bg(theme::ACCENT)
            .add_modifier(Modifier::BOLD),
    )];
    if branch.ahead > 0 || branch.behind > 0 {
        spans.push(Span::styled(
            format!("{}{}", branch.ahead, branch.behind),
            Style::new().fg(theme::MUTED),
        ));
    }
    f.render_widget(
        Paragraph::new(Line::from(spans)).style(Style::new().bg(theme::HEADER_BG)),
        area,
    );
}

pub fn footer(f: &mut Frame, area: Rect, app: &App) {
    let bg = Style::new().bg(theme::HEADER_BG);
    if !app.message.is_empty() {
        f.render_widget(
            Paragraph::new(Line::styled(
                format!(" {}", app.message),
                Style::new().fg(theme::TEXT),
            ))
            .style(bg),
            area,
        );
        return;
    }
    let chip = Style::new()
        .fg(theme::ACCENT)
        .bg(theme::SURFACE)
        .add_modifier(Modifier::BOLD);
    let mut spans = vec![Span::raw(" ")];
    for (key, label) in CHIPS {
        spans.push(Span::styled(format!(" {key} "), chip));
        spans.push(Span::styled(
            format!(" {label}  "),
            Style::new().fg(theme::MUTED),
        ));
    }
    f.render_widget(Paragraph::new(Line::from(spans)).style(bg), area);
}