cerberus-cli 0.1.7

Active Aggressive CLI Tools for Search Vulnerability
use crossterm::{
    event::{self, DisableMouseCapture, Event, KeyCode},
    execute,
    terminal::{disable_raw_mode, Clear, ClearType},
};
use std::io::{self, Write};

use crate::{elements::ui_oversize, route::{Page, Transition}};

use super::{settings::draw_settings, settings_typing::SettingsMenu};

pub fn handle_settings_events<W: Write>(
    stdout: &mut W,
    submenu: &mut SettingsMenu,
) -> io::Result<Transition> {
    loop {
        execute!(stdout, Clear(ClearType::All))?;
        match ui_oversize::detect(stdout) {
            Ok(Some(Transition::Quit)) => {
                disable_raw_mode()?;
                execute!(stdout, DisableMouseCapture)?;
                return Ok(Transition::Quit);
            }
            Ok(None) => {}
            Err(e) => return Err(e),
            _=>{}
        };
        
        draw_settings(stdout, submenu)?;
        
        match event::read()? {
            Event::Key(key) => match key.code {
                KeyCode::Char('q') => return Ok(Transition::Quit),
                KeyCode::Char('h') => return Ok(Transition::To(Page::Home)),
                KeyCode::Char('g') => *submenu = SettingsMenu::General,
                KeyCode::Char('a') => *submenu = SettingsMenu::Advanced,
                _ => {}
            },
            _ => {}
        }
    }
}