mod app;
mod config;
mod icons;
mod theme;
mod ui;

use crate::app::App;
use crossterm::{
    execute,
    terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
};
use std::io;

fn main() -> io::Result<()> {
    // Настройка терминала
    enable_raw_mode()?;
    let mut stdout = io::stdout();
    execute!(stdout, EnterAlternateScreen)?;
    let backend = ratatui::backend::CrosstermBackend::new(stdout);
    let mut terminal = ratatui::Terminal::new(backend)?;

    // Создание и запуск приложения
    let mut app = App::new();
    let res = app.run(&mut terminal);

    // Восстановление терминала
    disable_raw_mode()?;
    execute!(
        terminal.backend_mut(),
        LeaveAlternateScreen
    )?;
    terminal.show_cursor()?;

    if let Some(v) = &app.update_available {
        let version = env!("CARGO_PKG_VERSION");
        println!();
        println!("  ╔══════════════════════════════╗");
        println!("  ║     Update available!        ║");
        println!("  ║                              ║");
        println!("  ║    v{} → v{:<16}║", version, v);
        println!("  ║                              ║");
        println!("  ║    cargo install ffm --force ║");
        println!("  ╚══════════════════════════════╝");
        println!();
    }

    if let Err(err) = res {
        println!("{:?}", err)
    }

    Ok(())
}
