use serde_json::Value;
use std::collections::HashMap;
use crate::api::ApiKey;
#[derive(Debug)]
pub struct NationResources {
pub nation: String,
pub money: f64,
pub tech: f64,
pub production: f64,
pub minerals: f64,
pub uranium: f64,
pub rare_metals: f64,
pub fuel: f64,
pub political_power: f64,
}
pub async fn fetch_nation_resources(nation_id: i32) -> Result<NationResources, Box<dyn std::error::Error>> {
let api_key = ApiKey::get_apikey().ok_or("API key not set")?;
let url = format!(
"http://diplomacyandstrifeapi.com/api/AllianceMemberFunds?APICode={}",
api_key
);
let response = reqwest::get(&url)
.await?
.json::<Vec<HashMap<String, Value>>>()
.await?;
if let Some(user_data) = response
.into_iter()
.find(|entry| entry["NationId"] == nation_id)
{
Ok(NationResources {
nation: user_data["NationName"].as_str().unwrap_or("").to_string(),
money: user_data["Cash"].as_f64().unwrap_or(0.0),
tech: user_data["Tech"].as_f64().unwrap_or(0.0),
production: user_data["Production"].as_f64().unwrap_or(0.0),
minerals: user_data["Minerals"].as_f64().unwrap_or(0.0),
uranium: user_data["Uranium"].as_f64().unwrap_or(0.0),
rare_metals: user_data["RareMetals"].as_f64().unwrap_or(0.0),
fuel: user_data["Fuel"].as_f64().unwrap_or(0.0),
political_power: user_data["PoliticalPower"].as_f64().unwrap_or(0.0),
})
} else {
Err("Nation not found".into())
}
}