wallheaven 0.1.4

Random image fetcher for wallhaven.cc
use crate::files;
use crate::flags;
use config::Config;
use once_cell::sync::Lazy;
use std::path::PathBuf;
use std::sync::Mutex;

pub static CONFIG: Lazy<Mutex<Config>> = Lazy::new(|| {
    let flags = flags::cli_args();

    let mut config = Config::builder()
        .set_default("pages", 3)
        .unwrap()
        .set_default("expiry", 600)
        .unwrap()
        .set_default("purity", "110".to_string())
        .unwrap()
        .set_default("categories".to_string(), "111".to_string())
        .unwrap()
        .set_default("pages".to_string(), 5)
        .unwrap()
        .set_default("range".to_string(), "1M".to_string())
        .unwrap()
        .set_default("ratios".to_string(), "landscape".to_string())
        .unwrap();

    if let Some(flags_config) = flags.config {
        let cfg_path = PathBuf::from(&flags_config);
        if cfg_path.exists() {
            config = config.add_source(config::File::with_name(&flags_config));
        } else {
            panic!("File Error: Cannot find configuration file");
        }
    } else {
        let default_config_path = files::config_file_string();
        config = config.add_source(config::File::with_name(&default_config_path));
    }

    config = config.add_source(config::Environment::with_prefix("WALLHEAVEN"));

    if let Some(pages) = flags.pages {
        config = config.set_override("pages", pages).unwrap();
    }

    if let Some(expiry) = flags.expiry {
        config = config.set_override("expiry", expiry).unwrap();
    }

    if let Some(username) = flags.username {
        config = config.set_override("username", username).unwrap();
    }

    if let Some(apikey) = flags.apikey {
        config = config.set_override("apikey", apikey).unwrap();
    }

    if let Some(purity) = flags.purity {
        config = config.set_override("purity", purity).unwrap();
    }

    if let Some(categories) = flags.categories {
        config = config.set_override("categories", categories).unwrap();
    }

    if let Some(collection) = flags.collection {
        config = config.set_override("collection", collection).unwrap();
    }

    if let Some(random) = flags.random {
        config = config.set_override("random", random).unwrap();
    }

    if let Some(script) = flags.script {
        config = config.set_override("post_script", script).unwrap();
    }

    if let Some(range) = flags.range {
        config = config.set_override("range", range).unwrap();
    }

    Mutex::new(config.build().unwrap())
});