GildedRose-Refactoring-Kata/csharp/GildedRose.cs
2023-04-24 09:50:47 +03:00

113 lines
3.2 KiB
C#

using System.Collections.Generic;
using System;
namespace csharp
{
public class GildedRose
{
const int MinQuality = 0;
const int MaxQuality = 50;
const string AgedBrie = "Aged Brie";
const string Sulfuras = "Sulfuras, Hand of Ragnaros";
const string BackstagePasses = "Backstage passes to a TAFKAL80ETC concert";
const string Conjured = "Conjured Mana Cake";
IList<Item> Items;
public GildedRose(IList<Item> Items)
{
this.Items = Items;
}
void UpdateItem(ref Item item, int sellInValueFactor, int qualityValueFactor)
{
item.SellIn += sellInValueFactor;
item.Quality = Math.Max(MinQuality, Math.Min(MaxQuality, item.Quality + qualityValueFactor));
}
bool IsExpired(Item item)
{
bool output = true;
if (item.SellIn > 0)
output = false;
return output;
}
Item GetNewAgedBrie(Item item)
{
if (IsExpired(item))
UpdateItem(ref item, -1, 2);
else
UpdateItem(ref item, -1, 1);
return item;
}
Item GetNewBackstagesPasses(Item item)
{
if (IsExpired(item))
{
UpdateItem(ref item, -1, 0);
item.Quality = 0;
}
else
{
if (item.SellIn <= 10 && item.SellIn > 5)
{
UpdateItem(ref item, -1, 2);
}
else if (item.SellIn <= 5)
{
UpdateItem(ref item, -1, 3);
}
else
{
UpdateItem(ref item, -1, 1);
}
}
return item;
}
Item GetNewConjured(Item item)
{
if (IsExpired(item))
{
UpdateItem(ref item, -1, -4);
}
else
{
UpdateItem(ref item, -1, -2);
}
return item;
}
Item GetNewDefault(Item item)
{
if (IsExpired(item))
{
UpdateItem(ref item, -1, -2);
}
else
{
UpdateItem(ref item, -1, -1);
}
return item;
}
public void UpdateQuality()
{
for (int itemIndex = 0; itemIndex < Items.Count; itemIndex++)
{
switch (Items[itemIndex].Name)
{
case AgedBrie:
Items[itemIndex] = GetNewAgedBrie(Items[itemIndex]);
break;
case Sulfuras:
break;
case BackstagePasses:
Items[itemIndex] = GetNewBackstagesPasses(Items[itemIndex]);
break;
case Conjured:
Items[itemIndex] = GetNewConjured(Items[itemIndex]);
break;
default:
Items[itemIndex] = GetNewDefault(Items[itemIndex]);
break;
}
}
}
}
}