package parziale.p251110;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Clinica {
	
	ArrayList<Paziente> pazienti = new ArrayList<Paziente>();
	
	// 1. Numero di pazienti Ricoverati
	public int pazientiRicoverati() {
		return pazienti.size();
	}
	
	// 2. Inserimento del paziente
	/*
	 * Dal momento che non ci è permesso adoperare 
	 * TreeSet per l'ordine e per l'unicità
	 */
	public boolean ricoveraPaziente(Paziente paziente) {
		// Se il paziente è nullo, nulla verrà aggiunto
		if (paziente == null) return false;
		
		// Controllo se il paziente è già presente nella lista ricoveri
		Iterator<Paziente> it = pazienti.iterator();
		while (it.hasNext()) {
			Paziente current = it.next();
			if (paziente.equals(current)) return false;	// Se è già presente un paziente con id uguale allora non viene aggiunto e ritorna false
		}
		
		// Aggiunta del paziente 
		ListIterator<Paziente> lit = pazienti.listIterator();
		while (lit.hasNext()) {
			Paziente current = lit.next();
			int cmp = current.compareTo(paziente);
			if (cmp > 0) {
				lit.previous();
				lit.add(paziente);
				return true;
			}
		}
		
		lit.add(paziente);
		return true;
	}
	
	// 3. Dimissione
	public Paziente dimettiPaziente(String id, int annoNascita) {
		if (id == null || annoNascita <= 0) return null;
		Paziente tmp = new Paziente(id, annoNascita);
		
		Iterator<Paziente> iterator = pazienti.iterator();
		while (iterator.hasNext()) {
			Paziente current = iterator.next();
			int cmp = current.compareTo(tmp);
			if (cmp == 0) {
				// Paziente da rimuovere
				iterator.remove();
				return current;
			}
			if (cmp > 0) return null;
		}
		
		return null;
	}
	
	// 4. Età media
	public int etaMedia() {
		if (pazienti.isEmpty()) return 0;
		
		int currentDate = LocalDate.now().getYear();
		int avg = 0;
		
		Iterator<Paziente> it = pazienti.iterator();
		while (it.hasNext()) {
			int ageYear = currentDate - it.next().getAnnoNascita();
			avg += ageYear;
		}
		
		return avg / pazienti.size();
	}
	
	// 5. Età più rappresenta
	public int etaMediaPiuRappresentata() {
		
	}
}
