use std::io::{self, Write};

fn read_float(prompt: &str) -> f32 {
    print!("{prompt}");
    let _ = io::stdout().flush();
    let mut line = String::new();
    let _ = io::stdin().read_line(&mut line);
    let flt = line[..line.len() - 1].parse::<f32>();
    if flt.is_err() {
        println!("Invalid number: '{line}'");
        return read_float(prompt);
    }
    return flt.unwrap();
}

fn calculate_bmi(kg_weight: f32, cm_height: f32) -> f32 {
    let m_height = cm_height / 100.0;
    return kg_weight / (m_height * m_height);
}

fn main() {
    let in_height = read_float("Enter height (inches): "); 
    let lb_weight = read_float("Enter weight (pounds): ");
    let cm_height = in_height * 2.54;
    let kg_weight = lb_weight / 2.20462;
    println!("Your metric height: {cm_height:.3}cm");
    println!("Your metric weight: {kg_weight:.3}kg");
    println!("Your BMI: {:.3}", calculate_bmi(kg_weight, cm_height));
}
