lazy-locker 0.0.3

A secure local secrets manager with TUI interface and SDK support
use std::io::{stdout, Stdout};
use anyhow::Result;
use crossterm::{
    event::{DisableMouseCapture, EnableMouseCapture, KeyboardEnhancementFlags, PushKeyboardEnhancementFlags, PopKeyboardEnhancementFlags},
    execute,
    terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};

pub type Tui = Terminal<CrosstermBackend<Stdout>>;

/// Initialise le terminal : active le Raw Mode et bascule sur l'écran alternatif
pub fn init() -> Result<Tui> {
    enable_raw_mode()?;
    let mut stdout = stdout();
    
    // Try to enable keyboard enhancement for better compatibility
    // This is optional and may fail on some terminals
    let _ = execute!(
        stdout,
        EnterAlternateScreen,
        EnableMouseCapture,
        PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
    );
    
    // Fallback if keyboard enhancement failed
    execute!(stdout, EnterAlternateScreen)?;
    
    let backend = CrosstermBackend::new(stdout);
    let mut terminal = Terminal::new(backend)?;
    terminal.hide_cursor()?;
    terminal.clear()?;
    Ok(terminal)
}

/// Restaure le terminal : quitte l'écran alternatif et désactive le Raw Mode
pub fn restore() -> Result<()> {
    let mut stdout = stdout();
    // Try to pop keyboard enhancement (ignore errors)
    let _ = execute!(stdout, PopKeyboardEnhancementFlags);
    execute!(stdout, DisableMouseCapture, LeaveAlternateScreen)?;
    disable_raw_mode()?;
    Ok(())
}