/***
 * Excerpted from "Domain-Driven Design Using Naked Objects",
 * published by The Pragmatic Bookshelf.
 * Copyrights apply to this code. It may not be used to create training material, 
 * courses, books, articles, and the like. Contact us if you are in doubt.
 * We make no guarantees that this code is fit for any purpose. 
 * Visit http://www.pragmaticprogrammer.com/titles/dhnako for more book information.
***/
package com.pragprog.dhnako.carserv.dom.customer;

import org.nakedobjects.applib.annotation.MemberOrder;

import com.pragprog.dhnako.carserv.dom.payment.PaymentMethod;

public class Account extends PaymentMethod {

	
	// {{ Balance
	private Integer balance;

	@MemberOrder(sequence = "3.1")
	public Integer getBalance() {
		return balance;
	}

	public void setBalance(final Integer balance) {
		this.balance = balance;
	}
	// }}

	
	// {{ Limit
	private Integer limit;

	@MemberOrder(sequence = "3.2")
	public Integer getLimit() {
		return limit;
	}

	public void setLimit(final Integer limit) {
		this.limit = limit;
	}
	// }}


	// {{ pay
	@Override
	public boolean pay(Integer amount) {
		warnUser("Put onto Account");
		
		setBalance(getBalance() + amount);
		return true;
	}
	@Override
	public String validatePay(Integer amount) {
		int available = getLimit().intValue() - getBalance().intValue();
		return amount > available? "Amount exceeds available credit": null;
	}
	// }}


}
