/*
    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#include "buyernooptional.h"

TreeProductEuropeanBuyerNoOptional::TreeProductEuropeanBuyerNoOptional (const coefficient expiry, const PayoffBridge& payoff)
		: TreeProductBuyer (expiry, payoff)
{}

PiecewiseLinear TreeProductEuropeanBuyerNoOptional::final_hedge (const Spot& spot) const
{
	return payoff_hedge (expiry(), spot);
}

PiecewiseLinear TreeProductEuropeanBuyerNoOptional::payoff_hedge (const coefficient t, const Spot& spot) const
{
	if (t != expiry())
		return PiecewiseLinear (Line (0.0,-INFINITY));

	return TreeProductBuyer::payoff_hedge (t, spot);
}

PiecewiseLinear TreeProductEuropeanBuyerNoOptional::interim_hedge (const coefficient t, const Spot& spot, const PiecewiseLinear& future_hedge) const
{
#ifdef USE_ASSERT
	assert (t < expiry());
#endif

	PiecewiseLinear current = future_hedge;
	current.restrict_slope (-spot.ask(), -spot.bid());
	return current;
}

int TreeProductEuropeanBuyerNoOptional::exercise (const coefficient t, const Spot& spot, const Portfolio& current_portfolio) const
{
	if (t < expiry())
		return 0;

	return 1;
}

