use tyme4rs::tyme::culture::Terrain;
use crate::auspice::Auspice;
use crate::auspice::Auspicious;
const TERRAIN_NAME: [&str; 12] = ["长生", "沐浴", "冠带", "临官", "帝旺", "衰", "病", "死", "墓", "绝", "胎", "养"];
const TERRAIN_AUSPICE: [Auspice; 12] = [
Auspice::Auspicious, Auspice::Neutral, Auspice::Auspicious, Auspice::Auspicious, Auspice::GreatAuspicious, Auspice::Neutral, Auspice::Inauspicious, Auspice::GreatInauspicious, Auspice::Inauspicious, Auspice::GreatInauspicious, Auspice::Neutral, Auspice::Auspicious, ];
const TERRAIN_SUMMARY: [&str; 12] = [
"长生十二宫之首。万物初生之态,如人之出生,充满生机与希望。",
"长生十二宫第二位。又名\"桃花\",如人初生后沐浴净身,象征不稳定与桃花。",
"长生十二宫第三位。如人成年加冠,开始走向社会,代表成长、自信。",
"长生十二宫第四位。又名\"禄\",如人入仕做官,代表壮年、权力。",
"长生十二宫第五位。五行力量巅峰,如帝王之旺,极盛之态。盛极必衰。",
"长生十二宫第六位。帝旺之后力量开始衰退,如人步入中年体力下降。",
"长生十二宫第七位。力量进一步衰弱,如人生病,需休养调理。",
"长生十二宫第八位。万物气绝,如人之死亡,代表终结与静止。",
"长生十二宫第九位。又名\"库\",如人入土归葬,代表收藏、积蓄、隐藏。",
"长生十二宫第十位。万物气息断绝,旧形全消,但蕴含新生的转机。",
"长生十二宫第十一位。新生命在母体中孕育,代表新计划、新希望的萌芽。",
"长生十二宫第十二位。胎儿在母体中成长发育,即将出世,代表蓄养、培育。",
];
impl Auspicious for Terrain {
fn name(&self) -> &'static str { TERRAIN_NAME.get(self.get_index()).copied().unwrap_or("") }
fn summary(&self) -> &'static str { TERRAIN_SUMMARY.get(self.get_index()).copied().unwrap_or("") }
fn auspice(&self) -> Auspice { TERRAIN_AUSPICE.get(self.get_index()).copied().unwrap_or(Auspice::Neutral) }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn auspice_for_each_position() {
assert_eq!(Terrain::from_name("长生").auspice(), Auspice::Auspicious);
assert_eq!(Terrain::from_name("沐浴").auspice(), Auspice::Neutral);
assert_eq!(Terrain::from_name("冠带").auspice(), Auspice::Auspicious);
assert_eq!(Terrain::from_name("临官").auspice(), Auspice::Auspicious);
assert_eq!(Terrain::from_name("帝旺").auspice(), Auspice::GreatAuspicious);
assert_eq!(Terrain::from_name("衰").auspice(), Auspice::Neutral);
assert_eq!(Terrain::from_name("病").auspice(), Auspice::Inauspicious);
assert_eq!(Terrain::from_name("死").auspice(), Auspice::GreatInauspicious);
assert_eq!(Terrain::from_name("墓").auspice(), Auspice::Inauspicious);
assert_eq!(Terrain::from_name("绝").auspice(), Auspice::GreatInauspicious);
assert_eq!(Terrain::from_name("胎").auspice(), Auspice::Neutral);
assert_eq!(Terrain::from_name("养").auspice(), Auspice::Auspicious);
}
#[test]
fn name_and_summary_non_empty_for_all_12() {
for i in 0..12 {
let t = Terrain::from_index(i);
assert!(!t.name().is_empty(), "name missing for index {i}");
assert!(!t.summary().is_empty(), "summary missing for index {i}");
}
}
}