use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_with::{EnumMap, serde_as};
use crate::{NameLang, PhysicsMod};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Challenge {
#[serde(rename = "chapterSet")]
pub chapter_set: String,
#[serde(rename = "challengeID")]
pub challenge_id: String,
pub levels: Vec<ChallengeLevel>,
pub name: HashMap<String, String>,
#[serde(rename = "startDate")]
pub start_date: DateTime<Utc>,
#[serde(rename = "endDate")]
pub end_date: DateTime<Utc>,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ChallengeLevel {
pub name: String,
pub id: String,
#[serde_as(as = "EnumMap")]
pub physicsmod: Vec<PhysicsMod>,
}
impl Challenge {
pub fn get_name(&self, lang: NameLang) -> String {
if let Some(name) = self.name.get(&lang.to_string()) {
return name.to_owned();
}
String::from("Unknown")
}
}