/*----------------------------------------------------------------
  FILE: Account.java
  AUTHOR: Arthur Dick
  LAB: 3
  DATE: 24/09/02
  PURPOSE: Handles all the functions and data associated with
           emulating a simple ATM machine.
----------------------------------------------------------------*/


import tio.*;

class Account
{
    private static double[] acct = new double[5];
    private static boolean[] acctActive = new boolean[5];

    public static void closeAcct()
    {
	int account;

	account = chooseAccount();

	if (account == -1)
	    return;

	if (acctActive[account] == false)
	    System.out.println("Account is not active.");

	else if (acctActive[account] == true)
	    {
		if ((acct[account] > 0) || (acct[account] < 0))
			System.out.println("Please clear account before closing");

		else if (acct[account] == 0)
		    {
			acctActive[account] = true;
			System.out.println("Account has been closed.");
		    }
	    }
    }

    public static void openAcct()
    {
	int account;
	account = chooseAccount();

	if (account == -1)
	    return;

	if (acctActive[account] == true)
	    System.out.println("Account is already active!");

	else if (acctActive[account] == false)
	    {
		acctActive[account] = true;
		System.out.println("Account has been activated, thank you!");
	    }
    }

    private static int chooseAccount()
    {
	char ans;
	int selection = -1;
	boolean more = true;

	while (more == true) {
	    System.out.println();
	    System.out.println("Select Account:");
	    System.out.println("s == savings");
	    System.out.println("c == chequing");
	    System.out.println("v == visa");
	    System.out.println("1 == extra account 1");
	    System.out.println("2 == extra account 2");
	    System.out.println("q == return to main menu");
	    System.out.println();
	    System.out.print("Please choose an option: ");

	    ans = (char)Console.in.readChar();
	    Console.in.readLine();

	    switch (ans)
	    {
	    case 's' :
	    case 'S' : selection = 0;
		       more = false;
		       break;

	    case 'c' : 
            case 'C' : selection = 1;
		       more = false;
		       break;

	    case 'v' : 
	    case 'V' : selection = 2;
		       more = false;
		       break;
 
            case '1' : selection = 3;
		       more = false;
		       break;
 
	    case '2' : selection = 4;
		       more = false;
		       break;

	    case 'q' : 
            case 'Q' : more = false;
		       break;

	    default : System.out.println();
		      System.out.println("Sorry, unrecognized request.");
		      System.out.print("Please try again, or type 'q' to quit");
	    }
	}
	return (selection);
    }

    public static void doDeposit()
    {
	double amount;
	int account;

	account = chooseAccount();

	if (account == -1)
	    return;

	if (acctActive[account] == false)
	    {
		System.out.println("Please activate account before depositing.");
		return;
	    }

	System.out.print("Amount to deposit:");

	amount = Console.in.readDouble();
	Console.in.readLine();

	if (amount < 0.0)
	    System.out.println("Sorry, invalid amount."); // will not allow negative numbers for deposit

	else
	{
	    acct[account] += amount;
	    System.out.println("Transaction successful. Thank You.");
	}
    }

    public static void doWithdrawl()
    {
	double amount;
	int account;

	account = chooseAccount();

	if (account == -1)
	    return;

	if (acctActive[account] == false)
	    {
		System.out.println("Please activate account before withdrawing.");
		return;
	    }

	System.out.print("Amount to withdraw: ");

	amount = Console.in.readDouble();
	Console.in.readLine();

	if (amount < 0.0)
	    System.out.println("Sorry. Invalid amount.");

	else if ((acct[account] - amount) < -100.00) // allows you to be overdrawn up to -100
	    System.out.println("Sorry. Invalid amount.");

	else
	{
	    acct[account] -= amount;
	    System.out.println("Transaction sucessful. Thank You.");
	}
    }

    public static void showBalance()
    {
	int account;

	account = chooseAccount();

	if (account == -1)
	    return;

	if (acctActive[account] == false)
	    {
		System.out.println("Please activate account.");
		return;
	    }

	System.out.print("Your current balance is: $");
	System.out.println(acct[account]);

	if (acct[account] < 0.0) // gives additional message if you are overdrawn
	{
	    System.out.println();
	    System.out.println("!!! NOTE: You are overdrawn !!!");
	}
	System.out.println();
    }
}

