use crate::hangeul::{is_hangeul, split_phonemes};
use crate::number::{change_num_to_hangeul, is_digits};
pub fn guess_final_letter(word: &str) -> char {
let filtered = find_last_letter(word);
if filtered == 'N' {
'N'
} else {
split_phonemes(filtered)[2]
}
}
pub fn find_last_letter(word: &str) -> char {
let filtered = filter_only_significant(word);
if !filtered.is_empty() {
filtered[filtered.len() - 1]
} else {
'N'
}
}
pub fn filter_only_significant(word: &str) -> Vec<char> {
let word_len = word.chars().count();
let mut output: Vec<char> = Vec::new();
let mut numbers = String::new();
let mut bracket: bool = false;
for (i, c) in word.chars().enumerate() {
if c == '(' {
bracket = true;
} else if c == ')' {
bracket = false;
}
if bracket {
continue;
} else if is_hangeul(c) {
output.push(c);
}
if is_digits(c) {
numbers.push(c);
}
if !is_digits(c) || (i == word_len - 1) {
let num = change_num_to_hangeul(&numbers);
let mut arr_num = num.chars().collect();
output.append(&mut arr_num);
}
}
output
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn _filter_only_significant() {
let temp = "넥슨(코리아)";
let result = vec!['넥', '슨'];
assert_eq!(result, filter_only_significant(temp));
let temp = "비타500";
let result = vec!['비', '타', '오', '백'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(으)로";
let result = vec!['로'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(로)으";
let result = vec!['으'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(을)를";
let result = vec!['를'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(를)을";
let result = vec!['을'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(은)는";
let result = vec!['는'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(는)은";
let result = vec!['은'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(가)이";
let result = vec!['이'];
assert_eq!(result, filter_only_significant(temp));
let temp = "(이)가";
let result = vec!['가'];
assert_eq!(result, filter_only_significant(temp));
}
#[test]
fn _find_last_letter() {
let temp = "네이버";
let result = '버';
assert_eq!(result, find_last_letter(temp));
let temp = "google";
let result = 'N';
assert_eq!(result, find_last_letter(temp));
let temp = "넥슨(코리아)";
let result = '슨';
assert_eq!(result, find_last_letter(temp));
let temp = "비타500";
let result = '백';
assert_eq!(result, find_last_letter(temp));
}
#[test]
fn _guess_final_letter() {
let temp = "네이버";
let result = ' ';
assert_eq!(result, guess_final_letter(temp));
let temp = "google";
let result = 'N';
assert_eq!(result, guess_final_letter(temp));
let temp = "넥슨(코리아)";
let result = 'ㄴ';
assert_eq!(result, guess_final_letter(temp));
let temp = "비타500";
let result = 'ㄱ';
assert_eq!(result, guess_final_letter(temp));
}
}