package com.iluwatar.servant;

import java.util.ArrayList;


/**
 * Servant offers some functionality to a group of classes without defining that functionality in
 * each of them. A Servant is a class whose instance provides methods that take care of a desired
 * service, while objects for which the servant does something, are taken as parameters.
 * <p>
 * In this example {@link Servant} is serving {@link King} and {@link Queen}.
 *
 */
public class App {

  static Servant jenkins = new Servant("Jenkins");
  static Servant travis = new Servant("Travis");

  /**
   * Program entry point
   */
  public static void main(String[] args) {
    scenario(jenkins, 1);
    scenario(travis, 0);
  }

  /**
   * Can add a List with enum Actions for variable scenarios
   */
  public static void scenario(Servant servant, int compliment) {
    King k = new King();
    Queen q = new Queen();

    ArrayList<Royalty> guests = new ArrayList<>();
    guests.add(k);
    guests.add(q);

    // feed
    servant.feed(k);
    servant.feed(q);
    // serve drinks
    servant.giveWine(k);
    servant.giveWine(q);
    // compliment
    servant.giveCompliments(guests.get(compliment));

    // outcome of the night
    for (Royalty r : guests) {
      r.changeMood();
    }

    // check your luck
    if (servant.checkIfYouWillBeHanged(guests)) {
      System.out.println(servant.name + " will live another day");
    } else {
      System.out.println("Poor " + servant.name + ". His days are numbered");
    }
  }
}
