public void GetTranslations_VentorsGamble()
        {
            IReadOnlyDictionary <string, int> statDict = new Dictionary <string, int>
            {
                { "base_maximum_life", 30 },
                { "base_item_found_quantity_+%", 0 },
                { "base_item_found_rarity_+%", -15 },
                { "base_fire_damage_resistance_%", 33 },
                { "base_cold_damage_resistance_%", 0 },
                { "base_lightning_damage_resistance_%", -1 },
            };

            string[] expected =
            {
                "+30 to maximum Life",
                null,
                "15% reduced Rarity of Items found",
                "+33% to Fire Resistance",
                null,
                "-1% to Lightning Resistance",
            };
            var actual = _translator.GetTranslations(statDict);

            CollectionAssert.AreEqual(expected, actual.ToArray());
        }
            public string Translate(IReadOnlyList <int> values)
            {
                if (_valueIndices.Count != values.Count)
                {
                    throw new ArgumentException("Number of values must match number of value indices");
                }

                var firstMatch = _valueIndices
                                 .EquiZip(values, (i, v) => _affix.QueryModsSingleValue(i, v))
                                 .Aggregate((a, ms) => a.Intersect(ms))
                                 .FirstOrDefault();

                if (firstMatch == null)
                {
                    return(null);
                }

                var idValueDict = _valueIndices
                                  .Select(i => firstMatch.Stats[i].Id)
                                  .EquiZip(values, Tuple.Create)
                                  .ToDictionary(t => t.Item1, t => t.Item2);

                return(_statTranslator.GetTranslations(idValueDict).First());
            }