/**
 * 
 */
package system;
import java.util.ArrayList;
import java.util.List;

/**
 * Cliente è la classe che si occupa della gestione delle informazioni (e della logica) dei singoli clienti che faranno parte della Lista nella classe Negozio.java, quali dati anagrafici e lista acquisti.
 * Si occupa di selezionare l'acquisto più frequente del cliente, e di aggiungere acquisti alla lista di ciascun cliente.
 * 
 * @author Andrea Zinelli, 241192
 * 
 */



public class Cliente {

	public int ID;
	
	public String name;
	
	public String surname;
	
	public String address;
	
	public String CF;
	
	public String username;
	
	public String password;
	
	public List<Acquisto> purchased;  
	
	/**
	 * Class constructor.
	 * 
	 * @param ID : L'ID del cliente.
	 * @param name : Il nome del cliente.
	 * @param surname : Il cognome del cliente.
	 * @param address : L'indirizzo del cliente.
	 * @param CF : Il codice fiscale del cliente.
	 * @param username : Lo username del cliente.
	 * @param password : La password del cliente.
	 */
	
	public Cliente(final int ID, final String name, final String surname, final String address, final String CF, final String username, final String password){
		this.ID = ID;
		this.name = name;
		this.surname = surname;
		this.address = address;
		this.CF = CF;
		this.username = username;
		this.password = password;
		this.purchased = new ArrayList<Acquisto>(); 
	}
	
	/**
	 * Seleziona l'acquisto più frequente del cliente.
	 * 
	 * @return L'acquisto più frequente, null se il cliente non ha acquisti.
	 */
	
	public Acquisto SelectMostFrequent(){   
		
		Acquisto mostFrequent = null;
		int count =0;
		if(purchased.size()== 0) return null;
		for(int i = 0; i < purchased.size(); i++){
			if(purchased.get(i).count > count){
				count = purchased.get(i).count;
				mostFrequent = purchased.get(i);
			}
		}			
		return mostFrequent;
	}
	
	/**
	 * Aggiunge un oggetto agli acquisti. Se l'ID corrispondente all'oggetto non è trovato, un nuovo oggetto è aggiunto alla lista. Se l'ID corrispondente all'oggetto
	 * è già presente nella lista, il corrispondente valore di count è incrementato di 1.
	 * 
	 * @param item : l'oggetto da aggiungere 
	 */
	
	public void AddItem(Acquisto item){   
		boolean isPresent = false;
		
		for(int i = 0; i < purchased.size(); i++){
			if(item.ID==purchased.get(i).ID){
				isPresent = true; 
				purchased.get(i).count++;
				break;
			}
		}
		if(!isPresent) purchased.add(item);
	}
	
}
