package tutorialJava.examenes.examen20250131_2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import tutorialJava.Utils;
import tutorialJava.UtilsArrays;
import tutorialJava.capitulo5.ejercicios.bloque01_ArrayPersonas.Persona;

public class Principal {

	public static void main(String[] args) {
		HashMap<String, Double> almacen = new HashMap<String, Double>();
		int opcion = 0;
		
		// Datos mock
		almacen.put("Tomate 1kg", 3.00);
		almacen.put("Leche 1 L", 0.90);
		almacen.put("Anacardos", 4.30);
		
		do {
			opcion = muestraMenu();
			
			switch (opcion) {
			case 1:
				agregarProducto(almacen);
				break;		
			case 2:
				imprimirProductosOrdenados(almacen);
				break;
			}
			
		} while (opcion != 0);

	}

	/**
	 * 
	 * @param almacen
	 */
	public static void imprimirProductosOrdenados (HashMap<String, Double> almacen) {
		// Obtengo una lista con las keys del almacén
		List<String> keys = new ArrayList<String>();
		Iterator<String> it = almacen.keySet().iterator();
		while (it.hasNext()) {
			String key = it.next();
			keys.add(key);
		}
		
		// Ordeno la lista
		ordenaProductos(keys);
		
		// Recorro la lista, con las keys, obteniendo el precio de cada una
		for (String key : keys) {
			System.out.println("Código: " + key + " - precio: " 
					+ almacen.get(key));		
		}
	}
	
	/**
	 * 
	 * @param keys
	 */
	public static void ordenaProductos (List<String> keys) {
		boolean hayIntercambios = false;
		
		do {
			hayIntercambios = false;
			for (int i = 0; i < (keys.size() - 1); i++) {
				if (keys.get(i).toUpperCase().compareTo(
						keys.get(i + 1).toUpperCase()) == -1) {
					String aux = keys.get(i);
					keys.set(i, keys.get(i + 1));
					keys.set(i + 1, aux);
					hayIntercambios = true;
				}
			}
		} while (hayIntercambios == true);
	}
	
	
	/**
	 * 
	 * @param almacen
	 */
	public static void agregarProducto(HashMap<String, Double> almacen) {
		String codigo = Utils.obtenerCadenaConDescripcion("Introduzca código:");
		double precio = Utils.obtenerDoubleConDescripcion("Introduzca precio");
		almacen.put(codigo, precio);
	}
	
	/*
	 * 
	 */
	public static int muestraMenu() {
		Scanner sc = new Scanner(System.in);
		System.out.println("\n\nMenú" +
				"\n0.- Salir" +
				"\n1.- Introducir producto" +
				"\n2.- Visualizar productos ordenados" +
				"\n\tIntroduzca su opción: ");
		return Integer.parseInt(sc.next());
	}

}
