/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 */
package imc;

//Importamos los paquetes necesarios (esto ya sale automáticamente)
import java.text.DecimalFormat;
import java.util.Scanner;

/**
 *
 * @author Blasco
 */
public class IMC {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws InterruptedException {
        //Scanner para la petición de datos.
        Scanner sc = new Scanner(System.in);
        //Zona de variables
        char sexo;
        double altura, peso, pesonormal, imc, imcnormalh = 24, imcnormalm = 22.5;
        int edad;
        //Grueso del programa
        System.out.println("-------------- CÁLCULO DE TU ÍNDICE DE MASA CORPORAL (IMC) --------------");
        System.out.print("Indique el sexo (H-Hombre/M-Mujer): ");
        sexo = sc.next().charAt(0);
        sc.nextLine();
        do {
            if (sexo == 'H' || sexo == 'h' || sexo == 'M' || sexo == 'm') {
                break;
            } else {
                System.err.println("No has indicado correctamente el sexo. Inténtelo de nuevo.");
                System.out.print("Indique el sexo (H-Hombre/M-Mujer): ");
                sexo = sc.next().charAt(0);
                sc.nextLine();
            }
        } while (sexo != 'H' || sexo != 'h' || sexo != 'M' || sexo != 'm');
        if(sexo == 'H' || sexo == 'h'){
            System.out.println("El IMC normal para el hombre se sitúa en " + imcnormalh + " puntos.");
        } else if(sexo == 'M' || sexo == 'm'){
            System.out.println("El IMC normal para la mujer se sitúa en " + imcnormalm + " puntos.");
        }
        System.out.print("Introduce tu altura en metros: ");
        altura = sc.nextDouble();
        sc.nextLine();
        do {
            if(altura <= 0){
                System.err.println("El valor de la altura no puede ser 0 o negativo. Inténtelo de nuevo.");
                System.out.print("Introduce tu altura en metros: ");
                altura = sc.nextDouble();
                sc.nextLine();
            } else {
                break;
            }
        } while (altura <= 0);
        System.out.println("Altura recogida: " + altura + " metros.");
        System.out.print("Introduce tu peso actual en kilos (kg): ");
        peso = sc.nextDouble();
        sc.nextLine();
        do {
            if(peso <= 0){
                System.err.println("El valor del peso no puede ser 0 o negativo. Inténtelo de nuevo.");
                System.out.print("Introduce tu peso actual en kilos (kg): ");
                altura = sc.nextDouble();
                sc.nextLine();
            } else {
                break;
            }
        } while (peso <= 0);
        System.out.println("Peso recogido: " + peso + " kg.");
        System.out.print("Introduce tu edad actual: ");
        edad = sc.nextInt();
        sc.nextLine();
        do {
            if(edad < 0){
                System.err.println("No existen edades negativas. Inténtelo de nuevo.");
                System.out.print("Introduce tu edad actual: ");
                edad = sc.nextInt();
                sc.nextLine();
            } else {
                break;
            }
        } while (edad <= 0);
        System.out.println("Edad recogida: " + edad + " años.");
        System.out.println("Calculando IMC...");
        Thread.sleep(2000); // Temporizador de pausa de 2 segundos
        DecimalFormat df = new DecimalFormat("#.00"); // Convertir los números en decimales
        imc = peso / Math.pow(altura, 2);
        if(imc < 16) {
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que estás teniendo una delgadez severa "
                    + "en la que tienes que ganar varios kilos para estar en un peso más saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir unos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir unos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            }
        } else if (imc > 16 && imc <= 16.9){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que estás teniendo una delgadez moderada "
                    + "en la que tienes que ganar unos pocos kilos para estar en un peso más saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir unos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir unos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            }
        } else if (imc > 17 && imc <= 18.4){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que tienes un peso un poco más bajo de lo normal "
                    + "en la que puedes ganar sólo unos pocos kilos para estar en un peso saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir sólo estos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría subir sólo estos " + df.format(pesonormal - peso) + " kg para alcanzar esa meta.");
            }
        } else if (imc > 18.5 && imc <= 24.9){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. ¡ENHORABUENA!. Tu peso actual está dentro de lo normal. Siga "
                    + "cuidándose y mantenga una vida plena y saludable.");
        } else if (imc > 25 && imc <= 29.9){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que tienes un poco de sobrepeso "
                    + "en la que puedes bajar sólo unos pocos kilos para estar en un peso saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar sólo estos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar sólo estos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            }
        } else if (imc > 30 && imc <= 34.9){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que estás teniendo obesidad de clase 1 o leve "
                    + "en la que tienes que bajar unos kilos para estar en un peso saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            }
        } else if (imc > 35 && imc <= 39.9){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que estás teniendo obesidad de clase 2 o moderada "
                    + "en la que tienes que bajar varios kilos para estar en un peso saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            }
        } else if (imc >= 40){
            System.out.println("Tu IMC está en " + df.format(imc) + " puntos. Esto significa que estás teniendo obesidad de clase 3 o mórbida "
                    + "en la que tienes que bajar varios kilos para estar en un peso saludable y estable.");
            if(sexo == 'H' || sexo == 'h'){
                pesonormal = imcnormalh * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo hombre con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            } else if(sexo == 'M' || sexo == 'm'){
                pesonormal = imcnormalm * Math.pow(altura, 2);
                System.out.println("Tu peso normal, siendo mujer con una altura de " + altura + " metros, sería más o menos de "
                + df.format(pesonormal) + " kg. Te faltaría bajar unos " + df.format(peso - pesonormal) + " kg para alcanzar esa meta.");
            }
        } 
        System.out.println("Así que a partir de ahora intente mantener un estilo de vida saludable, cambie los hábitos físicos y de alimentación \n"
        + "para seguir una buena dieta, haga ejercicio siempre que pueda y no fume, ni beba alcohol, ni se enganche a precocinados. Acuda a su centro \n"
        + "de salud para más información. Cuídate mucho. Nos vemos.");
        sc.close();
    }
}
