package bankszámlákkezelése;

import java.util.List;

/**
 * @author Daniel "3ICE" Berezvai
 */
public class BankszámlákKezelése {

  /**
   * Néhány bankszámla objektum létrehozásával és függvényeinek kipróbálásával
   * teszteljük is az osztályt
   *
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    BankAccount a = new BankAccount();
    BankAccount b = new BankAccount();
    BankAccount c = new BankAccount();
    System.out.println("Fiókok A, B, C létrehozva.");
    System.out.println();

    System.out.println("B kezdőegyenlege: " + b.getBalance()
            + " Ft. (A másik két fióknak is 0.)");
    System.out.println();

    System.out.println("Adunk B-nek 10 000 Ft-ot:");
    b.deposit(10000);
    System.out.println("B új egyenlege: " + b.getBalance() + " Ft");
    System.out.println();

    System.out.println("Elveszünk B számlájáról 1 000 Ft-ot:");
    b.withdrawal(1000);
    System.out.println("B egyenlege most: " + b.getBalance() + " Ft");
    System.out.println();

    System.out.println("TFH jár B-nek 7% (" + (int) (b.getBalance() * 0.07)
            + " Ft) kamat:");
    b.deposit((int) (b.getBalance() * 0.07));
    System.out.println("B kamatoztatott egyenlege: " + b.getBalance() + " Ft");
    System.out.println();

    System.out.println("B egyenlegének felét (" + (int) (b.getBalance() / 2)
            + " Ft-ot) átutaljuk A-nak:");
    a.deposit((int) (b.getBalance() / 2));
    b.withdrawal((int) (b.getBalance() / 2));
    System.out.println("B új egyenlege: " + b.getBalance() + " Ft");
    System.out.println("A új egyenlege: " + a.getBalance() + " Ft");
    System.out.println();

    System.out.println("Adunk B-nek még kétszer 10 000 Ft-ot:");
    System.out.println("B egyenlege: " + b.getBalance() + " Ft");
    b.deposit(10000);
    System.out.println("B új egyenlege: " + b.getBalance() + " Ft");
    b.deposit(10000);
    System.out.println("B végső egyenlege: " + b.getBalance() + " Ft");
    System.out.println();

    System.out.println("Lekérdezzük B számlatörténetét és ellenőrizzük:");
    int x = 0;
    for (Integer i : b.getHistory()) {
      System.out.println(i);
      x += i;
    }
    if (x == b.getBalance()) {
      System.out.println("(" + x + " == " + b.getBalance()
              + ") Az ellenőrzés kijött: Tényleg " + x + " Ft van a számlán.");
    } else {
      System.out.println("Az ellenőrzés nem jött ki: " + x + " != "
              + b.getBalance());
    }
    System.out.println();

    System.out.println("Végül C-nek negatívba visszük a számláját (-1 Ft):");
    c.withdrawal(1);
    System.out.println("C egyenlege: " + c.getBalance() + " Ft");
    System.out.println();

    System.out.println("A rendszerben levő összes pénz: ( a:" + a.getBalance()
            + " + b:" + b.getBalance() + " + c:(" + c.getBalance() + ") )");
    System.out.println(a.getBalance() + b.getBalance() + c.getBalance() + " Ft");
    System.out.println();

    System.out.println("Javadoc is van minden függvényhez.");
    System.out.println();

    System.out.println("A tanár úr tesztjének eredménye:");
    new BankszámlákKezelése().doTest();
  }

  private void doTest() {
    BankAccount ba = new BankAccount();
    test(ba.getBalance() == 0);
    ba.withdrawal(30);
    ba.deposit(30);
    test(ba.getBalance() == 0);
    ba.deposit(-50);
    ba.deposit(60);
    test(ba.getBalance() == 10);
    ba.deposit(40);
    ba.withdrawal(10);
    ba.deposit(30);
    test(ba.getBalance() == 70);
    List<Integer> history = ba.getHistory();
    //ha a getHistory() nem a számlatörténet egy másolatát adja,
    //akkor ezután törli a számlatörténetet, ami nem jó:
    history.clear();
    test(ba.getHistory().size() == 7);
    System.out.println("plusz");
  }

  private void test(boolean testResult) {
    if (!testResult) {
      System.out.println("mínusz");
      System.exit(1);
    }
  }
}
