use crate::command::chat::app::{Action, ChatApp, CursorDirection};
use crossterm::event::{KeyCode, KeyEvent};
pub fn handle_archive_confirm_mode(app: &mut ChatApp, key: KeyEvent) {
if app.ui.archive_editing_name {
let action = match key.code {
KeyCode::Esc => {
app.ui.archive_editing_name = false;
app.ui.archive_custom_name.clear();
app.ui.archive_edit_cursor = 0;
return;
}
KeyCode::Enter => {
let name = if app.ui.archive_custom_name.is_empty() {
app.ui.archive_default_name.clone()
} else {
app.ui.archive_custom_name.clone()
};
if let Err(e) = super::super::archive::validate_archive_name(&name) {
app.update(Action::ShowToast(e, true));
return;
}
if super::super::archive::archive_exists(&name) {
let _ = super::super::archive::delete_archive(&name);
}
app.do_archive(&name);
return;
}
KeyCode::Backspace => Action::ArchiveConfirmDeleteChar,
KeyCode::Left => Action::ArchiveConfirmMoveCursor(CursorDirection::Up),
KeyCode::Right => Action::ArchiveConfirmMoveCursor(CursorDirection::Down),
KeyCode::Char(c) => Action::ArchiveConfirmInputChar(c),
_ => return,
};
app.update(action);
} else {
match key.code {
KeyCode::Esc => {
app.update(Action::ExitToChat);
}
KeyCode::Enter => {
let name = app.ui.archive_default_name.clone();
if super::super::archive::archive_exists(&name) {
let _ = super::super::archive::delete_archive(&name);
}
app.do_archive(&name);
}
KeyCode::Char('n') | KeyCode::Char('N') => {
app.ui.archive_editing_name = true;
app.ui.archive_custom_name.clear();
app.ui.archive_edit_cursor = 0;
}
KeyCode::Char('d') | KeyCode::Char('D') => {
app.update(Action::ClearSession);
app.update(Action::ExitToChat);
}
_ => {}
}
}
}
pub fn handle_archive_list_mode(app: &mut ChatApp, key: KeyEvent) {
let count = app.ui.archives.len();
if app.ui.restore_confirm_needed {
match key.code {
KeyCode::Esc => {
app.ui.restore_confirm_needed = false;
}
KeyCode::Char('y') | KeyCode::Char('Y') | KeyCode::Enter => {
app.update(Action::RestoreArchive);
}
_ => {}
}
return;
}
let action = match key.code {
KeyCode::Esc => Action::ExitToChat,
KeyCode::Up | KeyCode::Char('k') => Action::ArchiveListNavigate(CursorDirection::Up),
KeyCode::Down | KeyCode::Char('j') => Action::ArchiveListNavigate(CursorDirection::Down),
KeyCode::Enter => {
if count > 0 {
if !app.state.session.messages.is_empty() {
app.ui.restore_confirm_needed = true;
} else {
app.update(Action::RestoreArchive);
}
}
return;
}
KeyCode::Char('d') | KeyCode::Char('D') => {
if count > 0 {
Action::DeleteArchive
} else {
return;
}
}
_ => return,
};
app.update(action);
}