package com.github.cbpos1989.codingChallenge.banking_app;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;
/**
* App made as part of one day code challenge on the course.
* @author Colm O'Sullivan, Alex Scanlan, Joe Murphy & Przemek Stepien (Sam)
*
*/
public class BankApp{
private ArrayList<Customer> customersList = new ArrayList<Customer>();
private final String HEADING = "=============";
private Random rand = new Random();
public static void main(String[] args){
//System.out.println("Banking App Working");
BankApp ba = new BankApp();
ba.runProgram();
}
private void runProgram(){
populateArrayList(customersList);
displayMenu();
}
private void displayMenu(){
Scanner scan = new Scanner(System.in);
boolean invalidInput = true;
System.out.println(HEADING + "Banking App Menu" + HEADING);
System.out.println("1) List all Customers, and their Accounts\n2) List all Accounts, and their Customers\n3) Audit all Customers\n4) Exit");
do{
System.out.print("Enter Your Choice: ");
String userInput = scan.nextLine();
try{
int userNumber = Integer.parseInt(userInput);
switch(userNumber){
case 1: listCustomers();
//invalidInput = false;
break;
case 2: listAccounts();
//invalidInput = false;
break;
case 3: auditAllCustomers();
//invalidInput = false;
break;
case 4: System.out.println("\nExiting Program...");
invalidInput = false; break;
default: System.out.println("\nPlease enter digit between (1-4)");
invalidInput = true; break;
}
} catch (NumberFormatException nfe) {
//nfe.printStackTrace();
System.out.println("\nInvalid Input can't use alpha characters");
}
} while(invalidInput);
scan.close();
}
private void populateArrayList(ArrayList<Customer> list){
for(int i = 0; i < 100; ++i){
list.add(new Personal("alex", "129 Cashel Raod" , "0858349667", "18/07/78",("4803" + i)+ "83Y"));
list.add(new Business("alex", "212312 Cashel Road", "0-39103312", "18/31/33", true));
}
for(Customer c: customersList){
assignAccount(c);
}
}
private void assignAccount(Customer c){
for(int i = 0;i < (randomGenerator(2)+1); ++i){
boolean temp = randomGenerator(2) == 1? true : false;
Account acc = randomGenerator(2) == 1? new Deposit((randomGenerator(200000) - 100000), randomGenerator(10000) + i,new Transaction(), 0.04D): new Current((randomGenerator(200000) - 100000), randomGenerator(10000) + i,new Transaction(), temp);
c.setAccount(acc);
}
}
private int randomGenerator(int index){
return rand.nextInt(index);
}
private void listCustomers(){
System.out.println("");
System.out.println(HEADING + "Customers" + HEADING);
for(Customer c: customersList){
System.out.println(c);
}
}
private void listAccounts(){
System.out.println("");
System.out.println(HEADING + "Accounts" + HEADING);
for(Customer c: customersList){
for(int i = 0; i < c.checkAccQty(); ++i){
System.out.println(c.getAccount(i) + " " + c);
}
}
}
private void auditAllCustomers(){
System.out.println("");
System.out.println(HEADING + "Audits" + HEADING);
for(Customer c : customersList){
c.audit();
}
}
}