package com.gildedrose;
public class FluentItem {
public static final String CONCERT_PASSES = "Backstage passes to a TAFKAL80ETC concert";
public static final String AGED_BRIE = "Aged Brie";
public static final String SULFURAS = "Sulfuras, Hand of Ragnaros";
public static final int MAX_QUALITY = 50;
public static final int TEN_DAYS = 10;
public static final int FIVE_DAYS = 5;
public static final int SELLIN_DAY = 0;
protected final Item item;
protected FluentItem(Item item) {
this.item = item;
}
public static FluentItem from(Item item) {
switch (item.name) {
case AGED_BRIE:
return new AgedBrie(item);
case CONCERT_PASSES:
return new ConcertPasses(item);
case SULFURAS:
return new Sulfuras(item);
default:
return new FluentItem(item);
}
}
protected void update() {
setQuality(quality());
decrementSellIn();
}
protected int quality() {
if (overdue()) {
return item.quality - 2;
}
return item.quality - 1;
}
private void setQuality(int quality) {
item.quality = Math.max(0, Math.min(MAX_QUALITY, quality));
}
private void decrementSellIn() {
item.sellIn = item.sellIn - 1;
}
protected boolean overdue() {
return item.sellIn <= SELLIN_DAY;
}
}