public void DefaultPicker_ReturnsBestBatters()
        {
            Console.WriteLine();
            Console.WriteLine("options:-");;
            foreach (var setting in _sut.PickerOptions.OptionStrings())
            {
                Console.WriteLine($"    {setting}");
            }
            Console.WriteLine();

            var gameDate = DateTime.Now.AddDays(-1);              // US Date
            var result   = _sut.Choose(
                gameDate: gameDate,
                numberRequired: 2);

            if (Utility.GamePlayed(gameDate))
            {
                foreach (var selection in result.Selections)
                {
                    selection.Result = _resultChecker.Result(
                        selection.Batter,
                        gameDate);
                }
            }
            result.Dump();
            Assert.IsTrue(
                result.Selections.Count == 2,
                "There should be 2 batters returned");
        }
        static void Main(string[] args)
        {
            CalculateVersionInfo(
                out Version versionInfo,
                out DateTime computedDate);

            var logger = new Implementations.NLogAdaptor();

            logger.Info("-------------------------------------------------------------------------------------");
            logger.Info($@"Beat The Streak  ver:{
				versionInfo
				} built {
				computedDate.ToLongDateString()
				} Working Directory:{
				Directory.GetCurrentDirectory()
				}"                );

            var cacheLogger = new Cache.NLogAdaptor();
            var cache       = new RedisCacheRepository(
                connectionString: "localhost,abortConnect=false",
                environment: "local",
                functionalArea: "bts",
                serializer: new XmlSerializer(),
                logger: cacheLogger,
                expire: false);
            var pitcherRepo = new CachedPitcherRepository(
                new PitcherRepository(),
                cache);
            var lineupRepo = new CachedLineupRepository(
                new LineupRepository(),
                cache);
            var statsRepo = new CachedPlayerStatsRepository(
                new PlayerStatsRepository(),
                cache);
            var teamStatsRepo = new CachedTeamStatsRepository(
                new TeamStatsRepository(),
                cache);
            var opposingPitcher = new OpposingPitcher(
                pitcherRepo);
            var lineupProjector = new LineupProjector(
                lineupRepo,
                opposingPitcher,
                logger,
                daysToGoBack: 10);
            var resultChecker     = new ResultChecker(statsRepo);
            var configReader      = new ConfigReader();
            var mm                = new MailMan2(configReader, logger);
            var mailer            = new MailBatterReport(mailMan: mm, logger: logger);
            var gameLogRepository = new CachedGameLogRepository(
                new GameLogRepository(),
                cache);
            var obaCalculator = new CalculateOpponentOba(
                logger: logger,
                gameLogRepository: gameLogRepository);
            var options = new Dictionary <string, string>
            {
                { Constants.Options.HomePitchersOnly, "on" },
                { Constants.Options.LineupPositions, "3" },
                { Constants.Options.NoDaysOff, "off" },
                { Constants.Options.DaysOffDaysBack, "3" },
                { Constants.Options.HotBatters, "off" },
                { Constants.Options.HotBattersDaysBack, "30" },
                { Constants.Options.HotBattersMendozaLine, ".289" },
                { Constants.Options.PitchersMendozaLine, ".259" },
                { Constants.Options.PitcherDaysBack, "30" },
                { Constants.Options.BattersToPick, "2" },
                { Constants.Options.TeamClip, "off" },
                { Constants.Options.PitchersTeamMendozaLine, ".555" },
                { Constants.Options.BattersTeamMendozaLine, ".455" },
            };
            var pickerOptions = new PickerOptions(options);
            var sut           = new DefaultPicker(
                pickerOptions,
                lineupRepo,
                pitcherRepo,
                statsRepo,
                teamStatsRepo,
                lineupProjector,
                obaCalculator,
                logger);
            var gameDate = DateTime.Now;              // US Date

            try
            {
                var result = sut.Choose(
                    gameDate: gameDate,
                    numberRequired: 2);
                if (Utility.GamePlayed(gameDate))
                {
                    foreach (var selection in result.Selections)
                    {
                        selection.Result = resultChecker.Result(
                            selection.Batter,
                            gameDate);
                    }
                }
                result.Dump();
                mailer.MailReport(result);
                logger.Info("-------------------------------------------------------------------------------------");
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
                Environment.FailFast(message: null);
                throw;
            }
        }