package lab05.v2_pastelaria;
public interface CakeBuilder {

    public void setCakeShape(Shape shape);
    public void addCakeLayer();
    public void addCreamLayer();
    public void addTopLayer();
    public void addTopping();
    public void addMessage(String m);
    public void createCake();
    public Cake getCake();
}

abstract class BaseCakeBuilder implements CakeBuilder{
    protected Cake cake;

    public void createCake(){
        cake = new Cake();
    }

    public Cake getCake(){
        return this.cake;
    }


    public void setCakeShape(Shape shape){
        cake.setShape(shape);
    }

   //public void addCakeLayer(){
   //    cake.setCakeLayer("");
   //    cake.setNumCakeLayers(cake.getNumCakeLayers() + 1);
   //}

    public void addMessage(String m){
        cake.setMessage(m);
    }

    public abstract void addCakeLayer();
    public abstract void addCreamLayer();
    public abstract void addTopLayer();
    public abstract void addTopping();

    }

class ChocolateCakeBuilder extends BaseCakeBuilder{

    @Override
    public void addCakeLayer(){
        cake.setCakeLayer("Soft Chocolate");
        cake.setNumCakeLayers(cake.getNumCakeLayers() + 1);
    }

    @Override
    public void addCreamLayer(){
        cake.setMidLayerCream(Cream.Chocolate);
    }

    @Override
    public void addTopLayer(){
        cake.setTopLayerCream(Cream.Whipped_Cream);
    }

    @Override
    public void addTopping(){
        cake.setTopping(Topping.Fruit);
    }
    
}

class SpongeCakeBuilder extends BaseCakeBuilder{

    @Override
    public void addCakeLayer(){
        cake.setCakeLayer("Sponge");
        cake.setNumCakeLayers(cake.getNumCakeLayers() + 1);
    }

    @Override
    public void addCreamLayer(){
        cake.setMidLayerCream(Cream.Red_berries);
    }

    @Override
    public void addTopLayer(){
        cake.setTopLayerCream(Cream.Whipped_Cream);
    }

    @Override
    public void addTopping(){
        cake.setTopping(Topping.Fruit);
    }
    
}

class YogurtCakeBuilder extends BaseCakeBuilder{

    @Override
    public void addCakeLayer(){
        cake.setCakeLayer("Yogurt");
        cake.setNumCakeLayers(cake.getNumCakeLayers() + 1);
    }

    @Override
    public void addCreamLayer(){
        cake.setMidLayerCream(Cream.Vanilla);
    }

    @Override
    public void addTopLayer(){
        cake.setTopLayerCream(Cream.Red_berries);
    }

    @Override
    public void addTopping(){
        cake.setTopping(Topping.Chocolate);
    }
    
}