module decorator.coffeewithsize.app;

import decorator.coffeewithsize.beverage;
import decorator.coffeewithsize.espresso;
import decorator.coffeewithsize.darkroast;
import decorator.coffeewithsize.houseblend;
import decorator.coffeewithsize.decaf;
import decorator.coffeewithsize.mocha;
import decorator.coffeewithsize.milk;
import decorator.coffeewithsize.soy;
import decorator.coffeewithsize.whip;
import std.stdio : writeln;

alias Size = Beverage.Size;

void print(Beverage beverage)
{
    writeln(beverage.getDescription(), " $", beverage.cost());
}

void main()
{
    Beverage beverage = new Espresso();
    print(beverage);

    Beverage beverage2 = new DarkRoast();
    beverage2 = new Mocha(beverage2);
    beverage2 = new Mocha(beverage2);
    beverage2 = new Whip(beverage2);
    print(beverage2);

    Beverage beverage3 = new HouseBlend();
    beverage3.setSize(Size.VENTI);
    beverage3 = new Soy(beverage3);
    beverage3 = new Mocha(beverage3);
    beverage3 = new Whip(beverage3);
    print(beverage3);
}
