package parziale.p191108;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

public class Archivio {
	
	// Variabili di instanza
	private Map<String, Cliente> archivio = new HashMap<String, Cliente>();
	
	// Metodi
	
	// 2. Inserimento nell'archivio 
	/*
	 * Inserimento nell'archio attuale di una nuova associazione, 
	 * dati la targa dell'automobile(String) e un riferimento al proprietario 
	 * della classe Cliente: se l'automobile è già presente, si aggiorni l'informazione 
	 * relativa al proprietario
	 */
	public void aggiungi(String targa, Cliente cliente) {
		if (targa == null || cliente == null) throw new NullPointerException();
		
		targa = targa.trim();
		if (targa.isEmpty()) throw new IllegalArgumentException();
		
		archivio.put(targa, cliente);
	}
	
	// 3. Cancellazione dall'archivio attuale di un'automobile, data la sua targa
	public void remove(String targa) {
		if (targa == null) throw new NullPointerException();
		
		targa.trim();
		if (targa.isEmpty()) throw new IllegalArgumentException();
		
		archivio.remove(targa);
	}
	
	// 4. Creazione di un nuovo archivio contenete le automobili selezionate dall'archivio principale aventi il proprietario residente in una data città.
	public Map<String, Cliente> creaArchivoPerCitta(String citta) {
		if (citta == null) throw new NullPointerException();
		
		HashMap<String, Cliente> autoSelezionate = new HashMap<String, Cliente>();		
		
		for (String s : archivio.keySet()) {
			Cliente currentCliente = archivio.get(s);
			String currentCitta = currentCliente.cittaResidenza();
			
			if (currentCitta.equals(citta)) autoSelezionate.put(s, currentCliente);
		}
		
		return autoSelezionate;
	}
	
	// 5. Ordinamento dell’archivio in modo lessicografico crescente rispetto alla targa delle automobili
	public Map<String, Cliente> archivioOrdinatoRispettoAllaTarga() {
		TreeMap<String, Cliente> archivioOrdinato = new TreeMap<String, Cliente>(archivio);
		return archivioOrdinato;
	}
	
	// 6. Stampa su video l'archivio attuale
	public void stampaArchivio() {
		System.out.println(archivio);
	}
	
}
