GildedRose-Refactoring-Kata/csharpcore/GildedRose/GildedRose.cs
2024-03-13 14:12:21 +10:00

96 lines
2.3 KiB
C#

using System.Collections.Generic;
namespace GildedRoseKata;
public class GildedRose
{
private readonly IList<Item> _items;
const int MinQuality = 0;
const int MaxQuality = 50;
public GildedRose(IList<Item> items)
{
_items = items;
}
public void UpdateQuality()
{
foreach (var item in _items)
{
DailyItemUpdate(item);
}
}
private static bool IsLegendaryItem(Item item) => item.Name.ToLower().Contains("sulfuras");
private static bool IsBackstagePassesItem(Item item) => item.Name.ToLower().Contains("backstage passes");
private static bool IsBetterWithAgeItem(Item item) => item.Name.ToLower().Equals("aged brie");
private static bool IsRegularItem(Item item) => (!IsLegendaryItem(item) &&
!IsBackstagePassesItem(item) &&
!IsBetterWithAgeItem(item));
private static void IncreaseQuality(Item item, int byValue)
{
item.Quality = int.Min(item.Quality + byValue, MaxQuality);
}
private static void DecreaseQuality(Item item, int byValue)
{
item.Quality = int.Max(item.Quality - byValue, MinQuality);
}
private void DailyItemUpdate(Item item)
{
if (IsLegendaryItem(item)) return;
if (IsRegularItem(item))
{
DecreaseQuality(item, 1);
}
if (IsBetterWithAgeItem(item))
{
IncreaseQuality(item, 1);
}
if(IsBackstagePassesItem(item))
{
if (item.SellIn > 10)
{
IncreaseQuality(item, 1);
}
else if (item.SellIn > 5)
{
IncreaseQuality(item, 2);
}
else
{
IncreaseQuality(item, 3);
}
}
item.SellIn = item.SellIn - 1;
if (item.SellIn < 0)
{
if (IsRegularItem(item))
{
DecreaseQuality(item, 1);
}
if(IsBackstagePassesItem(item))
{
DecreaseQuality(item, item.Quality);
}
if(IsBetterWithAgeItem(item))
{
IncreaseQuality(item, 1);
}
}
}
}