package tutorialJava.examenes.examen20241213;

import tutorialJava.Utils;
import tutorialJava.examenes.examen20241211.Producto;

public class Principal {

	private static Animal[] animales = new Animal[Utils.obtenerNumeroAzar(10, 20)];
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		
		// Inicializo objetos en Array
		for (int i = 0; i < animales.length; i++) {
			if (i < (animales.length / 2)) {
				animales[i] = new Mamifero("Mamífero_" + i);
			}
			else {
				animales[i] = new Ave("Ave_" + i);
			}
		}

		muestraAnimales();
		ordenaBurbuja(animales);
		System.out.println("\nAnimales ordenados");
		muestraAnimales();
		
		System.out.println("\nEspacios necsarios");
		System.out.println("Total espacio necesario: " + calcularEspacioTotal());
		System.out.println("Total espacio mamíferos carnívoros: " + 
				calcularEspacioMamiferosCarnivoros());
		
		System.out.println("\nEstadísticas");
		System.out.println("Animal que más ocupa: " + animales[0].toString());
		System.out.println("Animal que menos ocupa: " + 
				animales[animales.length - 1].toString());
		System.out.println("Total mamíferos herbívoros: " + contadorMamiferosHerbivoros());
		System.out.println("Total aves gran envergadura: " + 
				contadorAvesGranEnvergadura());
	}
	
	/**
	 * 
	 */
	private static void muestraAnimales() {
		for (int i = 0; i < animales.length; i++) {
			System.out.println(animales[i].toString());
		}
	}

	
	private static float calcularEspacioTotal() {
		float espacio = 0;
		for (int i = 0; i < animales.length; i++) {
			espacio += animales[i].calcularEspacio();
		}
		return espacio;
	}
	
	
	private static float calcularEspacioMamiferosCarnivoros() {
		float espacio = 0;
		for (int i = 0; i < animales.length; i++) {
			if (animales[i] instanceof Mamifero) {
				Mamifero m = (Mamifero) animales[i];
				if (m.getTipoAlimentacion().equalsIgnoreCase("Carnívoro")) {
					espacio += animales[i].calcularEspacio();
				}
			}
		}
		return espacio;
	}
	
	/**
	 * 
	 * @return
	 */
	private static int contadorMamiferosHerbivoros() {
		int cont = 0;
		for (int i = 0; i < animales.length; i++) {
			if (animales[i] instanceof Mamifero) {
				Mamifero m = (Mamifero) animales[i];
				if (m.getTipoAlimentacion().equalsIgnoreCase("Herbívoro")) {
					cont++;
				}
			}
		}
		return cont;
	}
	
	/**
	 * 
	 * @return
	 */
	private static int contadorAvesGranEnvergadura() {
		int cont = 0;
		for (int i = 0; i < animales.length; i++) {
			if (animales[i] instanceof Ave) {
				Ave a = (Ave) animales[i];
				if (a.getEnvergaduraAlas() > 100) {
					cont++;
				}
			}
		}
		return cont;
	}
	
	/**
	 * 
	 * @param a
	 */
	public static void ordenaBurbuja(Animal a[]) {
		boolean hayIntercambios = false;
		do {
			hayIntercambios = false;
			for (int i = 0; i < a.length - 1; i++) {
				if (a[i].calcularEspacio() < a[i + 1].calcularEspacio()) {
					Animal aux = a[i];
					a[i] = a[i + 1];
					a[i + 1] = aux;
					hayIntercambios = true;
				}
			}
		} while (hayIntercambios == true);
		
	}

	
	
	
}







