class IndexOptionPricer {

  public double getOptionPremium(final double defaultAdjIndexValue, final double vol, final IndexOptionStrike strike, final boolean isPayer) {
    ArgumentChecker.notNull(strike, "strike");
    if (strike instanceof SpreadBasedStrike) {
      return getOptionPriceForSpreadQuotedIndex(defaultAdjIndexValue, vol, strike.amount(), isPayer);
    } else if (strike instanceof ExerciseAmount) {
      return getOptionPriceForPriceQuotedIndex(defaultAdjIndexValue, vol, strike.amount(), isPayer);
    } else {
      throw new IllegalArgumentException("unknow  strike type " + strike.getClass());
    }
  }

  public  IndexOptionPricer(final CDSAnalytic fwdCDS, final double timeToExpiry, final ISDACompliantYieldCurve yieldCurve, final double coupon);
  public  IndexOptionPricer(final CDSAnalytic fwdCDS, final double timeToExpiry, final ISDACompliantYieldCurve yieldCurve, final double coupon, final boolean useExactAnnuityCal);

}