public static string OutfieldShiftTypeToString(OutfieldShiftType shift)
        {
            switch (shift)
            {
            case OutfieldShiftType.OutfieldIn:
                return("Outfield In");

            default:
                return("None");
            }
        }
        private FieldingResult GetFlyoutResult(Random random, OutfieldShiftType outfieldShiftType)
        {
            var randomResult = random.Next(0, 100);

            if (randomResult < 8)
            {
                return(outfieldShiftType == OutfieldShiftType.None ? FieldingResult.FlyoutAllAdvance : FieldingResult.Double);
            }
            if (randomResult < 45)
            {
                if (outfieldShiftType == OutfieldShiftType.OutfieldIn)
                {
                    randomResult = random.Next(0, 2);
                    if (randomResult == 0)
                    {
                        return(FieldingResult.FlyoutSacrifice);
                    }
                }
                return(FieldingResult.Flyout);
            }
            return(FieldingResult.FlyoutSacrifice);
        }
        public FieldingResult GetFieldingResult(FieldingStint fielder, PositionType positionType, InfieldShiftType infieldShiftType, OutfieldShiftType outfieldShiftType)
        {
            // update these for shifts
            // add metrics for range and hits
            var random       = new Random();
            var randomResult = random.Next(0, 1001);

            if (fielder == null)
            {
                fielder = FieldingStintHelperFunctions.CreateFieldingStintForPlayerOutOfPosition(positionType);
            }

            var successThreshold = ((double)fielder.Errors / (fielder.Putouts + fielder.Errors + fielder.Assists)) * 1000;

            if (randomResult <= successThreshold)
            {
                randomResult = random.Next(0, 100);
                if (randomResult < 90)
                {
                    return(FieldingResult.OneBaseError);
                }
                else if (randomResult < 98)
                {
                    return(FieldingResult.TwoBaseError);
                }
                return(FieldingResult.ThreeBaseError);
            }
            randomResult = random.Next(0, 100);
            if (randomResult < 65)
            {
                if (positionType == PositionType.CenterFielder || positionType == PositionType.LeftFielder ||
                    positionType == PositionType.RightFielder || positionType == PositionType.OutFielder)
                {
                    return(GetFlyoutResult(random, outfieldShiftType));
                }
                return(GetGroundoutResult(random, infieldShiftType));
            }
            if (randomResult < 80)
            {
                if (positionType == PositionType.CenterFielder || positionType == PositionType.LeftFielder ||
                    positionType == PositionType.RightFielder || positionType == PositionType.OutFielder)
                {
                    return(GetFlyoutResult(random, outfieldShiftType));
                }
                if (infieldShiftType == InfieldShiftType.InfieldIn)
                {
                    randomResult = random.Next(0, 5);
                    if (randomResult < 2)
                    {
                        return(FieldingResult.Single);
                    }
                }
                return(FieldingResult.Popout);
            }
            if (randomResult < 95)
            {
                return(GetLineoutResult(random, positionType, infieldShiftType));
            }
            return(FieldingResult.Foulout);
        }