wthrr 0.5.0

Weather companion for the terminal
use anyhow::Result;

use crate::{
	args::{Cli, Forecast},
	config::{Config, Gui},
};

use self::units::Units;

mod address;
pub mod forecast;
mod language;
pub mod units;

pub struct Params {
	pub address: String,
	pub units: Units,
	pub language: String,
	pub forecast: Vec<Forecast>,
	pub gui: Gui,
}

impl Params {
	pub async fn get(args: &Cli) -> Result<Self> {
		let config: Config = confy::load("weathercrab", "wthrr")?;

		let language = language::get(
			args.language.as_deref().unwrap_or_default(),
			config.language.as_deref().unwrap_or_default(),
		)?;

		let forecast = forecast::get(&args.forecast, config.forecast)?;

		if args.reset {
			Config::reset(&language).await?;
			std::process::exit(1);
		}

		let address = address::get(
			args.address.as_deref().unwrap_or_default(),
			config.address.as_deref().unwrap_or_default(),
			&language,
		)
		.await?;

		let units = units::get(&args.units, &config.units.unwrap_or_default())?;

		let gui = config.gui.unwrap_or_default();

		Ok(Params {
			address,
			units,
			language,
			forecast,
			gui,
		})
	}
}