use iced::{Application, Settings};
use simplelog::*;
use ui::screen::{ScreenManager, StartupFlag};

pub mod client;
pub mod ui;

const LOG_FILE_PATH: &str = concat!(data_dir!(), "log");

pub fn main() {
    // Make sure data dir exists
    std::fs::create_dir_all(data_dir!()).unwrap();

    let mut config = ConfigBuilder::new();

    CombinedLogger::init(vec![
        TermLogger::new(LevelFilter::Error, config.build(), TerminalMode::Mixed),
        WriteLogger::new(
            LevelFilter::Error,
            config
                .set_target_level(LevelFilter::Error)
                .set_location_level(LevelFilter::Error)
                .build(),
            std::fs::File::create(LOG_FILE_PATH).unwrap(),
        ),
    ])
    .unwrap();

    let mut settings = if let Ok(Ok(session)) =
        std::fs::read_to_string(client::SESSION_ID_PATH).map(|s| toml::from_str(&s))
    {
        use std::os::unix::fs::PermissionsExt;

        if let Err(err) = std::fs::set_permissions(
            client::SESSION_ID_PATH,
            std::fs::Permissions::from_mode(0o600),
        ) {
            log::error!("Could not set permissions of session file: {}", err);
        }
        Settings::with_flags(StartupFlag::UseSession(session))
    } else {
        Settings::default()
    };
    settings.window.size = (1280, 720);

    ScreenManager::run(settings).unwrap();
}