fn main() {
    let text = String::from("Hello World!");
    println!("{text}");
    let encrypted = rot13(text);
    println!("{encrypted}");
    let decrypted = rot13(encrypted);
    println!("{decrypted}");

    //let equal = text == decrypted;
    //println!("{equal}");
}

fn rot13(text: String) -> String {
    let mut chars: Vec<char> = vec![];
    let a = 'a' as u32;
    let z = 'z' as u32;
    let aa = 'A' as u32;
    let zz = 'Z' as u32;
    for ch in text.chars() {
        let mut code = ch as u32;
        // dbg!(code);
        if a <= code && code <= z {
            code = a + ((code - a + 13) % 26);
            let ch_new = char::from_u32(code).expect("Could not convert to char");
            chars.push(ch_new);
        } else if aa <= code && code <= zz {
            code = aa + ((code - aa + 13) % 26);
            let ch_new = char::from_u32(code).expect("Could not convert to char");
            chars.push(ch_new);
        } else {
            chars.push(ch);
        }
    }

    let other: String = chars.into_iter().collect();
    other
}
