use anyhow::Result;
use clap::Parser;
use modules::*;
use modules::{args::Cli, display::Product, location::Geolocation, params::Params, weather::Weather};
mod modules;
#[tokio::main]
async fn main() -> Result<()> {
let args = Cli::parse();
let config = confy::load("weathercrab", "wthrr")?;
let params = Params::get(&args, &config).await?;
let product = run(¶ms).await?;
product
.render(¶ms.forecast, ¶ms.units, params.greeting, ¶ms.language)
.await?;
config.handle_next(args, params).await?;
Ok(())
}
pub async fn run(params: &Params) -> Result<Product> {
let loc = Geolocation::search(¶ms.address, ¶ms.language).await?;
let (lat, lon) = (loc[0].lat.parse::<f64>().unwrap(), loc[0].lon.parse::<f64>().unwrap());
let address = loc[0].display_name.to_string();
let weather = Weather::get(lat, lon, ¶ms.units).await?;
Ok(Product { address, weather })
}