import java.util.ArrayList;
import java.util.List;

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

    private List<Person> subalternes = new ArrayList<Person>(); 

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


    
    /** constructeur
     *
     * @param n fun factor
     *
     */ 
    public Chef(int n){
        super(n);
        // 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 output = 0;
        for (Person person : subalternes) {
            output += person.bestParty();
        }
        return output;
    }

    /** 
     * 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.
     *
     */ 
    private int bestPartyWithMe(){
        int output = getFunFactor();
        for (Person person : subalternes) {
            output += person.bestPartyWithoutMe();
        }
        return output; 
    }

    /**
     *  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(){
        int avec,sans;
        avec = this.bestPartyWithMe();
        sans = this.bestPartyWithoutMe();
        System.err.println("avec:"+avec+"\nsans:"+sans);
        if (avec > sans) {
            return avec;
        } else {
            return sans;
        }
    }
    
}


