//File Loan.h

class Loan{
public:
	Loan(char * aName, char * anAddress, const Date aDate, const double amount, const double anInterestRate, const int aTerm) {
		name = new char[strlen(aName) + 1];
		strcpy(name, aName); 
		address = new char[strlen(anAddress) + 1];
		strcpy(address, anAddress); 
		/*name = aName;
		address = anAddress;*/
		principle = amount;
		balance = principle;
		interestRate = anInterestRate;
		term = aTerm;
		cout << "\nCreating: ";
		printOn(cout);
	}
	~Loan(void){
		cout << "\nDeleting: ";
		printOn(std::cout);
		delete [] name;
		delete [] address;
	}
	char * getName()const {
		return name;
	}
	char * getAddress()const {
		return address;
	}
	Date getDate() const {
		return date;
	}
	double getBalance() const {
		return balance;
	}
	double monthlyPayment() const {
		double rate = interestRate/100/12;		//Interest rate as a fraction (/100) per month (/12)
		return principle * rate * pow(rate + 1, term) / (pow(rate + 1, term) - 1);
	}
	void makePayment(const double amount){
		balance += (balance * interestRate/100/12);
		balance -= amount;
	}
	void printOn(ostream & ostr) const {
		ostr << name << ", $" << fixed << std::setprecision(2) << principle << " for " << std::noshowpoint << term << " months at " << interestRate << "%";
	}
	void printPaymentSchedule(ostream & ostr) const {
		ostr << "\n\n----------------------------------------------------------";
		ostr << "\nPayment Schedule for: ";
		printOn(ostr);
		ostr << "\n=========================================================";
		ostr << "\n\nMonth Owing       Payment    Amount Remaining";
		double amount = principle;
		ostr.precision(2);
		for(int i=0; i<12; i++){
			ostr << "\n" << std::fixed << std::left << std::noshowpoint << std::setw(6) << i+1;
			amount += (amount * interestRate/100/12);
			ostr << std::fixed << std::left << std::showpoint << "$" << std::setw(11) << amount;
			ostr << std::fixed << std::left << "$" << std::setw(10) << monthlyPayment();
			amount -= monthlyPayment();
			ostr << std::fixed << "$" << amount;
		}
		ostr << "\n\nThe total amount paid was $" << std::fixed << monthlyPayment()*term;
		ostr << "\n\n----------------------------------------------------------";
	}

private:
	char * name;
	char * address;
	Date date;
	double principle;
	double interestRate;	//as a percent
	int term;				//in months
	double balance;

};

ostream & operator<<(ostream & ostr, const Loan & aLoan) {
	aLoan.printOn(ostr);
	return ostr;
}