public TieringCommand Execute(string group, string basetype, IEconomyProcessorData processorData)
        {
            if (this.Rule(basetype))
            {
                return(new TieringCommand()
                {
                    NewTier = TargetTier,
                    BaseType = basetype,
                    AppliedRule = RuleName,
                    Confidence = this.Confidence
                });
            }

            return(null);
        }
        public TieringCommand ProcessItem(string group, string basetype, string selectorString, IEconomyProcessorData processorData)
        {
            this.DefaultSet = DefaultItemQuery(selectorString);

            if (!this.DefaultSet.Valid)
            {
                return(new TieringCommand()
                {
                    AppliedRule = "disqualified",
                    BaseType = basetype,
                    NewTier = "rest",
                    Group = group,
                    Confidence = this.DefaultSet.ValueMultiplier
                });
            }

            string         targetTier    = "*";
            TieringCommand finalResult   = null;
            TieringCommand currentResult = null;

            for (int i = 0; i < this.EconomyRules.Count; i++)
            {
                var currentRule = this.EconomyRules[i];
                currentResult = null;

                if (targetTier == currentRule.RuleGroup || targetTier == "*")
                {
                    currentResult = currentRule.Execute(group, basetype, processorData);

                    if (currentResult != null)
                    {
                        if (finalResult == null)
                        {
                            finalResult = currentResult;
                        }
                        else
                        {
                            finalResult.NewTier     = $"{finalResult.NewTier},{currentResult.NewTier}";
                            finalResult.AppliedRule = $"{finalResult.AppliedRule},{currentResult.AppliedRule}";
                        }

                        if (currentRule.NextRuleGroupToken == null)
                        {
                            finalResult.Confidence = this.DefaultSet.ValueMultiplier;
                            return(finalResult);
                        }
                        else
                        {
                            targetTier = currentRule.NextRuleGroupToken;
                        }
                    }
                }
            }

            finalResult.Confidence = this.DefaultSet.ValueMultiplier;
            return(finalResult);
        }