/*----------------------------------------------------------------
  FILE: Account.java
  AUTHOR: Arthur Dick
  LAB: 3
  DATE: 24/09/02
  PURPOSE: Handles all the 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];
    
    private static Display display = new Display();
    
    public static void closeAcct(int account)
    {
	if (isAccountActive(account) == false)
	    System.out.println("Account is not active.");
	
	else
	    {
		if ((getAccountBalance(account) != 0))
		    System.out.println("Please clear account before closing");
		
		else
		    {
			deactivateAccount(account);
			System.out.println("Account has been closed.");
		    }
	    }
    }
    
    public static void openAcct(int account)
    {
	if (isAccountActive(account) == true)
	    System.out.println("Account is already active!");
	
	else
	    {
		activateAccount(account);
		System.out.println("Account has been activated, thank you!");
	    }
    }
    
    public static void doDeposit(int account)
    {
	double amount;
	
	if (isAccountActive(account) == false)
	    {
		System.out.println("Please activate account before depositing.");
		return;
	    }
	
	amount = display.getDepositAmount();
	setAccountBalance(account, getAccountBalance(account) + amount);
	System.out.println("Transaction successful. Thank You.");
    }
    
    public static void doWithdrawl(int account)
    {
	double amount;
	
	if (isAccountActive(account) == false)
	    {
		System.out.println("Please activate account before withdrawing.");
		return;
	    }
	
	
	amount = display.getWithdrawAmount(getAccountBalance(account) + 100); // allows you to be overdrawn up to -100
	
	setAccountBalance(account, getAccountBalance(account) - amount);
	System.out.println("Transaction successful. Thank You.");
    }
    
    public static void showBalance(int account)
    {
	if (isAccountActive(account) == false)
	    {
		System.out.println("Please activate account.");
		return;
	    }
	
	double balance = getAccountBalance(account);
	
	System.out.println("Your current balance is: $" + balance);
	
	if (balance < 0.0) // gives additional message if you are overdrawn
	    {
		System.out.println();
		System.out.println("!!! NOTE: You are overdrawn !!!");
	    }
	System.out.println();
    }
    
    
    public static double getAccountBalance(int account)
    {
	if(isAccountActive(account))
	    return acct[account];
	else
	    throw new IllegalArgumentException("Invalid Account");
    }
    
    public static void setAccountBalance(int account, double balance)
    {
	if(isAccountActive(account))
	    acct[account] = balance;
	else
	    throw new IllegalArgumentException("Invalid Account");
    }
    
    public static void activateAccount(int account)
    {
	if(!isAccountActive(account))
	    acctActive[account] = true;
	else
	    throw new IllegalArgumentException("Invalid Account");
    }
    
    public static void deactivateAccount(int account)
    {
	if(isAccountActive(account))
	    acctActive[account] = false;
	else
	    throw new IllegalArgumentException("Invalid Account");
    }
    
    public static boolean isAccountActive(int account)
    {
	if((account >= 0) && (account < acct.length))
	    return acctActive[account];
	else
	    throw new IllegalArgumentException("Invalid Account");
    }
}

