package capitulo06.bloque01.ejercicio01;

import java.util.ArrayList;
import java.util.List;

import static capitulo04.utils.Utils.*;

public class Main {
    public static void main(String[] args) {

        List<Integer> listaIntegers = new ArrayList<Integer>();
        int opcion = 0;
        do {
            System.out.println("Seleccione un opción: \n" +
                    "0 - Abandonar el programa\n" +
                    "1 - Crear aleatoriamente la lista de valores\n" +
                    "2 - Calcular suma, media, mayor y menor\n" +
                    "3 - Agregar una cantidad de nuevos valores\n" +
                    "4 - Eliminar elementos cuyo valor esté en un intervalo\n" +
                    "5 - Imprimir la lista");
            opcion = solicitarIntScannerInline("> ");

            switch (opcion) {
                case 1:
                    int longitudLista = solicitarIntScannerInline("Introduzca la longitud de la lista: ");
                    int minimoLista = solicitarIntScannerInline("Introduzca el valor mínimo que puede tomar un número de la lista: ");
                    int maximoLista = solicitarIntScannerInline("Introduzca el valor máximo que puede tomar un número de la lista: ");

                    listaIntegers.clear();
                    for (; longitudLista > 0; longitudLista--) {
                        listaIntegers.add(generarIntAleatorioEntreLimites(minimoLista, maximoLista));
                    }
                    break;
                case 2:
                    if (!listaIntegers.isEmpty()) {
                        int suma = 0;
                        int mayor = 0;
                        int menor = 0;
                        for (int i = 0; i < listaIntegers.size(); i++) {
                            if (i == 0) {
                                mayor = listaIntegers.get(i);
                                menor = listaIntegers.get(i);
                            }
                            suma += listaIntegers.get(i);
                            if (listaIntegers.get(i) > mayor) mayor = listaIntegers.get(i);
                            if (listaIntegers.get(i) < menor) menor = listaIntegers.get(i);
                        }

                        System.out.println("La suma es: " + suma +
                                "\nLa media es: " + suma / (float) listaIntegers.size() +
                                "\nEl mayor número es: " + mayor +
                                "\nEl menor número es: " + menor);

                    } else System.out.println("La lista está vacía, introduzca sus valores primero.");
                    break;
                case 3:
                    int cantidadNuevos = solicitarIntScannerInline("Introduzca la longitud de los datos nuevos que va a insertar: ");
                    int minimoNuevos = solicitarIntScannerInline("Introduzca el valor mínimo que puede tomar un número de la lista: ");
                    int maximoNuevos = solicitarIntScannerInline("Introduzca el valor máximo que puede tomar un número de la lista: ");
                    int indiceArray = solicitarIntScannerInline("Introduzca en qué posición de la lista quiere insertar los datos nuevos: ");

                    List<Integer> numsAdicionales = new ArrayList<Integer>();
                    for (; cantidadNuevos > 0; cantidadNuevos--) {
                        numsAdicionales.add(generarIntAleatorioEntreLimites(minimoNuevos, maximoNuevos));
                    }
                    listaIntegers.addAll(indiceArray, numsAdicionales);
                    break;
                case 4:
                    int minimoEliminar = solicitarIntScannerInline("Introduzca el límite mínimo de números a eliminar de la lista: ");
                    int maximoEliminar = solicitarIntScannerInline("Introduzca el límite máximo de números a eliminar de la lista: ");

                    List<Integer> numsAEliminar = new ArrayList<Integer>();
                    for (; minimoEliminar <= maximoEliminar; minimoEliminar++) numsAEliminar.add(minimoEliminar);

                    int tamanoAntes = listaIntegers.size();
                    listaIntegers.removeAll(numsAEliminar);

                    System.out.println("Se han eliminado " + (tamanoAntes - listaIntegers.size()) + " elementos.");
                    break;
                case 5:
                    System.out.println(listaIntegers.toString());
            }


        } while (opcion != 0);

    }
}
