using System;
using System.Collections.Generic;
namespace csharp.StrategyPatternExample.Strategy
{
///
/// Implements the strategy; Increases in Quality as its SellIn value approaches.
///
internal class CloseExpiredImproveQualityStrategy : ICategoryStrategy
{
#region subclasses
public class NextExpiredCondition
{
///
/// SellIn to check.
///
public int SellInLimit { get; set; }
///
/// Incremento to apply.
///
public int Increment { get; set; }
}
#endregion
#region Variables
private IList listConditions;
#endregion
#region Constructor
public CloseExpiredImproveQualityStrategy(IList conditions)
{
if (conditions == null && conditions.Count == 0)
{
// INFO : A good candidate to Globalization.
throw new ArgumentException("Param conditions list is empty.");
}
this.listConditions = conditions;
}
#endregion
#region Methods
public void Update(Item item)
{
item.SellIn--;
if (item.SellIn < 0)
{
item.Quality = Global.MINIMUM_QUALITY;
}
else
{
int inc = 1;
foreach (NextExpiredCondition condition in listConditions)
{
if (item.SellIn < condition.SellInLimit)
{
inc = condition.Increment;
break;
}
}
item.Quality += inc;
if (item.Quality > Global.MAXIMUM_QUALITY)
{
item.Quality = Global.MAXIMUM_QUALITY;
}
}
}
#endregion
}
}