package tutorialJava.examenes.examen20250221.ejercicioB;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

import tutorialJava.Utils;
import tutorialJava.examenes.examen20250221.ejercicioA.Producto;

public class EjercicioB {

	private static HashMap<String, FrecuenciaLetra> hmFrecuenciaLetras = 
			new HashMap<String, FrecuenciaLetra>();
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		String frase = Utils.obtenerCadenaConDescripcion("Dame la frase: ");
		int contLetras = 0, contDigitos = 0, contEspacios = 0,
				contOtros = 0;
		
		
		for (int i = 0; i < frase.length(); i++) {
			if (Character.isLetter(frase.charAt(i))) {
				contLetras++;
				procesaLetra(frase.charAt(i));
			}
			else if (Character.isDigit(frase.charAt(i))) contDigitos++;
			else if (Character.isWhitespace(frase.charAt(i))) contEspacios++;
			else contOtros++;
		}
		
		// Imprimo resultados
		System.out.println("Letras: " + contLetras + " - "
				+ "dígitos: " + contDigitos + " - " 
				+ "espacios: " + contEspacios + " - "
				+ "otros: " + contOtros);
		
		// Muestro las frecuencias
		List<FrecuenciaLetra> l = ordenaHashMapFrecuencias();
		if (l.size() > 0) {
			System.out.println("Letra más frecuente: " + 
					l.get(0).getLetra() + " - " + l.get(0).getFrecuencia());
		}
		if (l.size() > 1) {
			System.out.println("Letra más frecuente: " + 
					l.get(1).getLetra() + " - " + l.get(1).getFrecuencia());
		}
		if (l.size() > 2) {
			System.out.println("Letra más frecuente: " + 
					l.get(2).getLetra() + " - " + l.get(2).getFrecuencia());
		}
	}

	/**
	 * 
	 * @param letra
	 */
	private static void procesaLetra(char letra) {
		if (hmFrecuenciaLetras.get("" + letra) == null) {
			hmFrecuenciaLetras.put("" + letra, 
					new FrecuenciaLetra(letra, 1));
		}
		else { // Ya existe un objeto guardado para esa letra
			hmFrecuenciaLetras.get("" + letra).addFrecuencia(1);
		}
	}
	
	
	/**
	 * 
	 * @return
	 */
	private static List<FrecuenciaLetra> ordenaHashMapFrecuencias() {
		List<FrecuenciaLetra> l = 
				new ArrayList<FrecuenciaLetra>(hmFrecuenciaLetras.values());
		
		Collections.sort(l, new Comparator<FrecuenciaLetra>() {
			@Override
			public int compare(FrecuenciaLetra f1, FrecuenciaLetra f2) {
				return f2.getFrecuencia() - f1.getFrecuencia();
			}
		});
		return l;
	}

}













