public SkillAffixProcStat(decimal procChance, PowerTypesEnum powerType, string selectedAffix, DamageSkillStat skillData, List <AffixMetadataEnum> md)
        {
            var rand  = SkillStatHelper.GetRNG(powerType);
            var level = powerType == PowerTypesEnum.AngelicPower ? skillData.AngelicPower : powerType == PowerTypesEnum.DemonicPower ? skillData.DemonicPower : skillData.AncestralPower;

            this.Level         = level;
            this.PowerType     = powerType;
            this.SelectedAffix = selectedAffix;
            this.Stackable     = md.Contains(AffixMetadataEnum.Stackable);
            this.IsBuff        = md.Contains(AffixMetadataEnum.BuffDebuff);

            var highTier     = skillData.Tier >= 3;
            var HighCD       = md.Contains(AffixMetadataEnum.HighCD);
            var spender      = md.Contains(AffixMetadataEnum.HighCost);
            var procsOnDeath = md.Contains(AffixMetadataEnum.ProcsOnDeath);

            this.ProcsOnDeath = procsOnDeath;

            // if (procsOnDeath) {
            //     // Probably is a buff if LPR on death as well ?
            //     var isBuff = EnumHelper.Contains<LBsEnum>(selectedAffix);
            // }

            var minBuffOrTotemDur = procsOnDeath ? (!highTier? 75 : 200) : (!highTier? 250 : 400);
            var maxBuffOrTotemDur = procsOnDeath ? (!highTier? 175 : 350) : (!highTier? 350 : 600);
            var minBuffDurIncr    = procsOnDeath ? (!highTier? 10 : 30) : (!highTier? 20 : 50);
            var maxBuffDurIncr    = procsOnDeath ? (!highTier? 30 : 50) : (!highTier? 40 : 100);
            var randDurBonus      = rand.Next(minBuffDurIncr, maxBuffDurIncr) * level;

            var average    = DecimalHelper.RoundToDecimals((skillData.From + skillData.To) / 2, 2);
            var minDPSIncr = procsOnDeath ? (!highTier? 8 : 8) : (!highTier? 20 : 18);
            var maxDPSIncr = procsOnDeath ? (!highTier? 25 : 20) : (!highTier? 40 : 25);
            var randBonus  = rand.Next(minDPSIncr, maxDPSIncr) * level;

            if (md.Contains(AffixMetadataEnum.BuffDebuff) || md.Contains(AffixMetadataEnum.BannerOrTotem))
            {
                this.Duration   = DecimalHelper.RoundToDecimals(randDurBonus / 100, 2);
                this.ProcAmount = DecimalHelper.RoundToDecimalsD(average * (randBonus / 250), 2);
            }
            else if (md.Contains(AffixMetadataEnum.HasDoT))
            {
                this.Duration   = DecimalHelper.RoundToDecimals(randDurBonus / 250, 2);
                this.ProcAmount = DecimalHelper.RoundToDecimalsD(average * (randBonus / 100), 2);
            }
            else if (md.Contains(AffixMetadataEnum.Summon))
            {
                this.Duration   = DecimalHelper.RoundToDecimals(randDurBonus / 50, 2);
                this.ProcAmount = DecimalHelper.RoundToDecimalsD(average * (randBonus / 75), 2);
            }
            // else if (md.Contains(AffixMetadataEnum.Curse))
            // {
            //     this.Duration = DecimalHelper.RoundToDecimals(randDurBonus/125, 2);
            //     this.ProcAmount = DecimalHelper.RoundToDecimalsD(average * (randBonus/75), 2);
            // }
            else
            {
                var durIncr = highTier ? rand.Next(level * 25, level * 45) : rand.Next(level * 15, level * 25);
                this.Duration   = ((skillData.Duration ?? 0) * (1 + durIncr / 100));
                this.ProcAmount = DecimalHelper.RoundToDecimalsD(average * randBonus / 100, 2);
            }

            // TODO: Set procChance upgrades per level, i.e. level
            this.ProcChance = procChance;
        }