package examenes.examen20241213;

import examenes.examen20241213.utils.Utils;

public class Zoologico {
    public static void main(String[] args) {
        Animal[] animales = new Animal[Utils.generarIntAleatorioEntreLimites(10, 20)];

        for (int i = 0; i < animales.length; i++) {
            if (i < animales.length / 2) {
                animales[i] = new Mamifero();
            } else {
                animales[i] = new Ave();
            }
        }

        System.out.println("Lista de animales: ");
        mostrarArrayAnimales(animales);

        System.out.print("\nEspacio total necesario para albergar todos los animales del zoológico: ");
        float sumaEspacioTotal = 0;
        for (Animal animal : animales) {
            sumaEspacioTotal += animal.getEspacio();
        }
        System.out.println(sumaEspacioTotal);


        System.out.print("\nEspacio total necesario para albergar todos los animales mamíferos del zoológico: ");
        float sumaEspacioMamiferos = 0;
        for (Animal animal : animales) {
            if (animal instanceof Mamifero) sumaEspacioMamiferos += animal.getEspacio();
        }
        System.out.println(sumaEspacioMamiferos);


        ordenarPorEspacio(animales);

        System.out.println("\nLista de animales ordenados por espacio:");
        mostrarArrayAnimales(animales);

        System.out.println("\nAnimal que más espacio necesita:");
        System.out.println(animales[0]);

        System.out.println("\nAnimal que menos espacio necesita:");
        System.out.println(animales[animales.length - 1]);

        System.out.print("\nTotal de mamíferos Herbívoros: ");
        int contadorHerbivoros = 0;
        for (Animal animal : animales) {
            if (animal instanceof Mamifero &&
                    ((Mamifero) animal).getTipoAlimentacion().equals("Herbívoro")) {
                contadorHerbivoros++;
            }
        }
        System.out.println(contadorHerbivoros);


        System.out.print("\nTotal de aves cuya envergadura es mayor de 100: ");
        int contadorEnvergadura = 0;
        for (Animal animal : animales) {
            if (animal instanceof Ave &&
                    ((Ave) animal).getEnvergaduraAlas() > 100) {
                contadorEnvergadura++;
            }
        }
        System.out.println(contadorEnvergadura);


    }

    private static void ordenarPorEspacio(Animal[] animales) {
        boolean ordenando;
        do {
            ordenando = false;
            for (int i = 0; i < animales.length; i++) {
                if (i != (animales.length - 1) && animales[i].getEspacio() < animales[i + 1].getEspacio()) {
                    Animal tempNum = animales[i];
                    animales[i] = animales[i + 1];
                    animales[i + 1] = tempNum;
                    ordenando = true;
                }
            }
        } while (ordenando);
    }

    private static void mostrarArrayAnimales(Animal[] animales) {
        for (Animal animal : animales) {
            System.out.println(animal);
        }
    }

}
