import java.util.*;
import java.io.*;

public class BankAccountApp {

    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(new File("accounts.text"));

		final int CAPACITY = 100;

        BankAccount [] accounts = new BankAccount[CAPACITY];

		int size = 0;
		while (in.hasNextInt()) {
            accounts[size] = new BankAccount();
			readAccount(in, accounts[size]);
			size++;
		}

		System.out.println("-- After reading in and creating the accounts");
        printAccounts(accounts, size);

		System.out.println("--- Performing a deposit of 5000 on account at position 1");
        accounts[1].deposit(5000);
        printAccounts(accounts, size);

		System.out.println("-- Sorting by owner");
        sort(accounts, size);
        printAccounts(accounts, size);
    }

    // ---------------- Input ----------------

    static void readAccount(Scanner in, BankAccount account) {
        account.accountNumber = readAccountNumber(in);
        account.owner = readOwner(in);
        account.balance = readBalance(in);        // cents
        account.status = readStatus(in);
        account.openedDate = readOpenedDate(in);
    }

    static int readAccountNumber(Scanner in) {return in.nextInt();}
    static String readOwner(Scanner in) {return in.next();}
    static int readBalance(Scanner in) {return in.nextInt();}
    static String readStatus(Scanner in) {return in.next();}
    static String readOpenedDate(Scanner in) {return in.next();}

    // ---------------- Output ----------------

    static void printAccounts(BankAccount [] accounts, int size) {
        System.out.println("ACCOUNTS");
        System.out.println("-------------");
		for (int i = 0; i < size; i++) { 
			accounts[i].print();
			System.out.println();
		}
	} 

    // ---------------- Sort ----------------
    
    static void sort(BankAccount [] accounts, int size) {
		boolean swapped = true;
		for (int last = size-1; size > 0 && swapped; size --) {
			swapped = false;
			for (int i = 0; i < last; i++)
				if (accounts[i].owner.compareTo(accounts[i+1].owner) > 0) {
					swap(accounts, i, i+1);
					swapped = true;
				}
		}
	}

	static void swap(BankAccount [] accounts, int idx1, int idx2) {
        BankAccount t = accounts[idx1];
        accounts[idx1] = accounts[idx2];
        accounts[idx2] = t;
	}
}
