//===============================================
// Author: Josh Larsen      Date Revised: $Date: 1996/05/30 14:29:26 $
// Class Name: CurrencyAcceptor     Version: $Revision: 1.2 $
// Filename: CurrencyAcceptor.java
// Package: pcm.machine
// Purpose: This class represents the monetary input unit.
//===============================================

package com.nansoft.pcm.machine;
import com.nanosoft.pcm.machine.*;
import java.io.*;
import java.util.*;

public class CurrencyAcceptor extends Object {

   MoneyAmount balance;
   MoneyAmount cheapestItemPrice;
   MoneyAmount depositedMoney;

	public CurrencyAcceptor() {
		balance = new MoneyAmount();
		cheapestItemPrice = new MoneyAmount();
		depositedMoney = new MoneyAmount();
	}
	
	public CurrencyAcceptor(StorageItem anItem) {
		balance = new MoneyAmount();
		cheapestItemPrice = anItem.getPrice();
		depositedMoney = new MoneyAmount();
	}

	public Boolean checkForMinimalBalance() {
		Boolean temp;
		if (balance.getAmount() >= cheapestItemPrice.getAmount()) temp = TRUE;
		else temp = FALSE;
		return temp;
	}	

	public void clearBalances() {
		balance = new MoneyAmount();
		depositedMoney = new MoneyAmount();
	}
	
	public Boolean completeTransaction(String aSelection) {
		MoneyAmount price = StorageUnit.getPrice(aSelection);

		if (balance.getAmount() < price.getAmount()) throw new InsufficientFundsError();   
		MainDisplay.displayAmount(price);
		balance = MoneyAmount.subtract(balance, price);
		StorageUnit.dispenseItem(aSelection);
		return checkForMinimalBalance();
	}

	public void depositAmount(MoneyAmount money) {
		depositedMoney = MoneyAmount.add(depositedMoney, money);
		balance = MoneyAmount.add(balance, money);
		MainDisplay.displayAmount(money);
	}

	public MoneyAmount getCurrentAmount() {
		return balance;
	}
	
	public MoneyAmount getDepositedAmount() {
		return depositedMoney;
	}

	public void updateLowestCostItem(StorageItem anItem) {
		cheapestItemPrice = anItem.getPrice();
   }
}