// $RCSfile: SaleCitiesPricingStrategy.cpp,v $
#include "SaleCitiesPricingStrategy.h"

SaleCitiesPricingStrategy
 ::SaleCitiesPricingStrategy(
      vector<City *> *discounted,
      float discountFraction)
 : cities(new vector<City *>(*discounted)),
    discountFactor(1 - discountFraction)
{}

Money *
SaleCitiesPricingStrategy
 ::getTotal(Reservation *context) {
  Money *preDiscount =
    context->getPreDiscountTotal();
  if (throughDiscountedCity(context)) {
    return preDiscount->scaleBy(
              discountFactor);
  } else {
    return preDiscount;
  }
}

bool
SaleCitiesPricingStrategy
 ::throughDiscountedCity(Reservation *r) {
  vector<City *>::iterator i;
  for (i = cities->begin(); i != 0; i++) {
    return r->contains(*i);
  }
}

SaleCitiesPricingStrategy::
~SaleCitiesPricingStrategy(){
  this->PricingStrategy::~PricingStrategy();
  delete cities;
}

SaleCitiesPricingStrategy::
 SaleCitiesPricingStrategy(
  const SaleCitiesPricingStrategy &p)
   : cities(new vector<City*>(*(p.cities))),
   discountFactor(p.discountFactor)
{
   reservation = 
     new Reservation(*(p.reservation));
}

SaleCitiesPricingStrategy *
SaleCitiesPricingStrategy::clone() {
  return new SaleCitiesPricingStrategy(*this);
}
