use anyhow::Result;
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use crate::app::{App, InputMode};
pub fn handle_week_summary_input(app: &mut App, key: KeyEvent) -> Result<bool> {
let editing = matches!(
&app.input_mode,
InputMode::WeekSummary { editing: Some(_), .. }
);
if editing {
handle_edit(app, key)
} else {
handle_browse(app, key)
}
}
fn handle_browse(app: &mut App, key: KeyEvent) -> Result<bool> {
let shift = key.modifiers.contains(KeyModifiers::SHIFT);
match key.code {
KeyCode::Esc | KeyCode::Char('q') | KeyCode::Char('Q') => {
app.input_mode = InputMode::Normal;
}
KeyCode::Left if shift => app.week_change_week(-1),
KeyCode::Right if shift => app.week_change_week(1),
KeyCode::Left => app.week_select_day(-1),
KeyCode::Right => app.week_select_day(1),
KeyCode::Up => app.week_move_field(-1),
KeyCode::Down => app.week_move_field(1),
KeyCode::Enter => app.week_open_day()?,
KeyCode::Char('e') | KeyCode::Char('E') => app.week_begin_edit(),
_ => {}
}
Ok(false)
}
fn handle_edit(app: &mut App, key: KeyEvent) -> Result<bool> {
match key.code {
KeyCode::Esc => app.week_edit_cancel(),
KeyCode::Enter => app.week_edit_save()?,
KeyCode::Tab => app.week_edit_tab(),
KeyCode::Up => app.week_edit_adjust(-1),
KeyCode::Down => app.week_edit_adjust(1),
KeyCode::Backspace => app.week_edit_backspace(),
KeyCode::Char(c) => app.week_edit_input(c),
_ => {}
}
Ok(false)
}