//
// ------  Main (Driver) ------
int main(void)
{
	Money Giveme(10,12);
	Money IWant(11.20);
	Money GotNone;
	

	cout << " I gave you " <<	Giveme.amount() <<	 endl;
	cout << " You Wanted " <<	IWant.amount() << 	 endl;
	cout << " you got nothing " << GotNone.amount() << endl;

	cout << " Giving you more from " << Giveme.amount(20.35);
	cout <<  " To " << Giveme.amount() << endl;

    Money MaxMoney = Giveme.max(IWant), MinMoney = IWant.min(Giveme);

	cout << " The Max Money is " << MaxMoney.amount() << endl;
	cout << " The Min Money is " << MinMoney.amount() << endl;
	
    Giveme.add(IWant);

	cout << " The Add Money is " ;
	Giveme.show(); 
	cout << endl;

	IWant.sub(Giveme);

	cout << " The Sub Money is " ;
	IWant.show() ;
	cout << endl;

	IWant.use_parens();

	cout << " The account style Money is " ;
	IWant.show() ;
	cout << endl;

    Giveme.mul(2.0);

	cout << " The Mul Money is " ;
	Giveme.show(); 
	cout << endl;

	IWant.div(-1.0);

	cout << " The div Money is " ;
	IWant.show() ;
	cout << endl;

	return 0;
}
//------------------------------------------------------------------------------
void ConditionValueDelegate::setModelData(QWidget* editor,
	QAbstractItemModel* model, const QModelIndex& index) const
{
	switch (field(index))
	{
	case AssignmentRule::Date:
	{
		QDateEdit* dateEditor = static_cast<QDateEdit*>(editor);
		QDate date = dateEditor->date();
		model->setData(index, date.toString(Qt::ISODate), Qt::EditRole);
	}
		break;

	case AssignmentRule::Amount:
	{
		MoneyEdit* moneyEditor = static_cast<MoneyEdit*>(editor);
		Money amount = moneyEditor->value();
		QString newVal = QString("%1,%2")
			.arg(amount.amount()).arg(amount.currency().code());
		model->setData(index, newVal, Qt::EditRole);
	}
		break;

	default:
	{
		LineEdit* stringEditor = static_cast<LineEdit*>(editor);
		model->setData(index, stringEditor->text(), Qt::EditRole);
	}

	}
}
//
// ------  (/) operator  ---
//
Money Money::operator/(double value) const
{
	Money temp;
	if (value != 0) 
	  temp.amount(amount() / value);
	return temp;
}
//
// ------  Main (Driver) ------
int main(void)
{
    Money Giveme(10,12);
    Money IWant;
    Money GotNone;

    cout << " Enter what you want " ;
    cin >> IWant;



    cout << " I gave you " <<	Giveme.amount() <<	 endl;
    cout << " You Wanted " <<	IWant.amount() << 	 endl;
    cout << " you got nothing " << GotNone.amount() << endl;

    cout << " Giving you more from " << Giveme.amount(20.35);
    cout <<  " To " << Giveme.amount() << endl;

    Money MaxMoney = Giveme.max(IWant), MinMoney = IWant.min(Giveme);

    cout << " The Max Money is " << MaxMoney.amount() << endl;
    cout << " The Min Money is " << MinMoney.amount() << endl;

    Money AddMoney = Giveme + IWant;

    cout << " The Add Money is " << AddMoney << endl;

    Money SubMoney  = IWant - Giveme;

    cout << " The account style Money is " << SubMoney << endl;
    SubMoney.use_parens();

    cout << " The account style Money is " << SubMoney << endl;

    Money MulMoney2 = Giveme * 2.0;
    cout << " The Mul Money * 2 is " << MulMoney2 << endl;

    Money MulMoney4 = 4.0 * Giveme;
    cout << " The 4 * Mul Money  is " << MulMoney4 << endl;

    Money DivMoney = IWant / (2.0);
    cout << " The div Money is " << DivMoney << endl;

    return 0;
}
Money operator*(const Money &m, double factor)
{
	return Money(m.amount() * factor);	 
}
Money Money::operator-(const Money & m) const
{
	 return Money(amount() - m.amount());
}
Money Money::operator+(const Money & m) const
{
	return Money(m.amount() + amount());	 
}