use crate::core::model::ganzhi::{EARTHLY_BRANCHES, EarthlyBranch, HeavenlyStem};
const fn yin_palace_stem(year_stem: HeavenlyStem) -> HeavenlyStem {
use HeavenlyStem::{Bing, Geng, Jia, Ren, Wu};
match year_stem {
HeavenlyStem::Jia | HeavenlyStem::Ji => Bing,
HeavenlyStem::Yi | HeavenlyStem::Geng => Wu,
HeavenlyStem::Bing | HeavenlyStem::Xin => Geng,
HeavenlyStem::Ding | HeavenlyStem::Ren => Ren,
HeavenlyStem::Wu | HeavenlyStem::Gui => Jia,
}
}
pub fn palace_stem_for_branch(year_stem: HeavenlyStem, branch: EarthlyBranch) -> HeavenlyStem {
let forward_steps = (branch.index() + EARTHLY_BRANCHES.len() - EarthlyBranch::Yin.index())
% EARTHLY_BRANCHES.len();
yin_palace_stem(year_stem).offset(forward_steps as isize)
}
pub fn palace_stems_from_year_stem(year_stem: HeavenlyStem) -> [HeavenlyStem; 12] {
let mut stems = [HeavenlyStem::Jia; 12];
let mut index = 0;
while index < EARTHLY_BRANCHES.len() {
stems[index] = palace_stem_for_branch(year_stem, EARTHLY_BRANCHES[index]);
index += 1;
}
stems
}