Documentation
use pinyin2ch::pinyin::Pinyin;
use rand::Rng;

#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]

pub struct Heyiwei(String);

impl Default for Heyiwei {
    fn default() -> Self {
        Self("何意味".to_string())
    }
}

impl Into<String> for Heyiwei {
    fn into(self) -> String {
        self.0
    }
}

impl std::fmt::Display for Heyiwei {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.0)
    }
}

impl Heyiwei {
    pub fn random() -> Self {
        let he_chars = pinyin2ch::ch_char::get_chars(&Pinyin::new("he").unwrap());
        let yi_chars = pinyin2ch::ch_char::get_chars(&Pinyin::new("yi").unwrap());
        let wei_chars = pinyin2ch::ch_char::get_chars(&Pinyin::new("wei").unwrap());
        let random_num = rand::rng().random_range(0..he_chars.len());
        let random_he = &he_chars[random_num];
        let random_num = rand::rng().random_range(0..yi_chars.len());
        let random_yi = &yi_chars[random_num];
        let random_num = rand::rng().random_range(0..wei_chars.len());
        let random_wei = &wei_chars[random_num];
        Self(format!(
            "{}{}{}",
            random_he.char, random_yi.char, random_wei.char
        ))
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_heyiwei_random() {
        println!("Random Heyiwei: {}", Heyiwei::random().0);
        panic!()
    }
}