use std::path::Path;
use rand::Rng;
pub struct Config {
pub span: bool,
pub query: String,
pub api_key: Option<String>,
}
pub fn parse_cli_args(args: Vec<String>) -> Config {
let span_string = "span".to_string();
let span = args.contains(&span_string);
let mut keywords = args;
remove_element(&mut keywords, span_string);
let keyword = if keywords.is_empty() {
"".to_string()
} else {
choose_random_keyword(keywords)
};
Config {
span,
query: keyword,
api_key: std::env::var("WALLHAVEN_API_KEY").ok(),
}
}
fn choose_random_keyword(keywords: Vec<String>) -> String {
if keywords.len() > 1 {
let random_index = rand::rng().random_range(0..keywords.len());
keywords.get(random_index).unwrap().to_string()
} else {
keywords.first().unwrap().to_string()
}
}
fn remove_element(keywords: &mut Vec<String>, term: String) {
let index = keywords.iter().position(|item| *item == term);
if let Some(index) = index {
keywords.remove(index);
}
}
pub fn is_url(to_check: &str) -> bool {
to_check.starts_with("http") && to_check.contains("://")
}
use crate::utils::expand_tilde;
pub fn is_local_path(to_check: &str) -> bool {
let expanded = expand_tilde(to_check);
Path::new(&expanded).exists()
}