class Wallet {
  private String owner;
  private long amountInCents;

  public Wallet (String owner) {
    this.owner = owner;
    this.amountInCents = 0l;
  }

  public Wallet (String owner, long amountInCents) {
    this.owner = owner;
    this.amountInCents = amountInCents;
  }

  public String getOwner() {
    return owner;
  }

  public long getAmount() {
    return amountInCents;
  }

  public void addMoney(long cents) {
    amountInCents += cents;
  }

  public boolean removeMoney (long cents) {
    if (amountInCents < cents)
      return false;
    
    amountInCents -= cents;
 
    return true;
  }


  public boolean isFatter (Wallet w) {
    if (amountInCents > w.amountInCents)
      return true;

    return false;
  }

  public String toString() { 
    return owner + ": $" + (amountInCents / 100) + "." + (amountInCents % 100);    
  }


  public boolean equals(Object o) { 
    Wallet w = (Wallet) o;
    
    if (!owner.equals(w.owner))
      return false;

    if (amountInCents != w.amountInCents)
      return false;

    return true;
  }


  public static void main(String[] args) {
    Wallet gregsWallet = new Wallet ("Gregory Kesden");
    System.out.println (gregsWallet);

    Wallet forbesWallet = new Wallet ("Steve Forbes", 100); // One dollar
    System.out.println (forbesWallet);

    System.out.println (forbesWallet.getOwner() + ": $" +
                        (forbesWallet.getAmount() / 100) + "." +
                        (forbesWallet.getAmount() % 100));

    forbesWallet.addMoney (150);
    System.out.println (forbesWallet);
    System.out.println (gregsWallet);

    if (forbesWallet.removeMoney(250))
      System.out.println ("Expected success removing from Forbes Wallet.");
    else
      System.out.println ("Unxpected failure removing from Forbes Wallet.");

    if (!forbesWallet.removeMoney(1)) // Notice the !, remember, think NOT
      System.out.println ("Expected failure removing from Forbes Wallet.");
    else
      System.out.println ("Unxpected success removing from Forbes Wallet.");


    // Test one way
    if (!forbesWallet.isFatter(gregsWallet)) 
      System.out.println ("Expected: forbeswallet NOT fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet fatter than gregswallet");

    // Test symmetric way
    if (!gregsWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: forbeswallet fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet NOT fatter than gregswallet");

    // Test equal (not one greater tha the other) case
    forbesWallet.removeMoney(250);
    if (!gregsWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: gregswallet NOT fatter than forbeswallet.");
    else
      System.out.println ("Unxpected: gregswallet fatter than forbeswallet");

    if (!forbesWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: forbeswallet fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet NOT fatter than gregswallet");


  }
}
