import java.util.*;

/** feuille du motif composite */
public class Chef extends Person {

    ArrayList<Person> subalternes;


    public boolean addSubalterne(Person p){
        return this.subalternes.add(p);
    }


    
    /** constructeur
     *
     * @param n fun factor
     *
     */ 
    public Chef(int n){
        super(n);
        this.subalternes = new ArrayList<Person>(100);
        // d'autres choses peut-être.
    }

    
    /** 
     * La meilleure fête avec moi, c'est la meilleure fête sans mes subalternes pour eux plus moi. 
     *
     * @return retourne la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique, mais pas elle.
     *
     */ 
    public int bestPartyWithoutMe(){
        int funParty = 0;
        for(int i=0;i<this.subalternes.size();i++){
            funParty += this.subalternes.get(i).bestParty();
        }
        return funParty;
    }

    /**
     *  La meilleure fête est soit sans moi (c'est l'union des meilleures fêtes de mes subalternes). 
     *  soit c'est la meilleure fête avec moi.
     *
     * @return la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique (peut-être avec elle).
     *
     */ 
    public int bestParty(){
        return Integer.max(this.bestPartyWithMe(),this.bestPartyWithoutMe());
    }

    private int bestPartyWithMe(){
        int funParty = this.getFunFactor();
        for(int i=0;i<this.subalternes.size();i++){
            funParty += this.subalternes.get(i).bestPartyWithoutMe();
        }
        return funParty;
    }
    
}


