// GET: Visits
        public IActionResult Index()
        {

            if (!_context.Shops.Any())
            {
                return RedirectToAction("Index", "Shops");
            }
            

            var visit = new Visit();
            var currentVisits = _context.Visits;
            var activeVisitors = currentVisits.Count() -
                currentVisits.Where(x => x.isCheckedOff).Count();
            var shop = _context.Shops.First();

            if (currentVisits.Count() != 0)
            {
                foreach (var v in currentVisits)
                {
                    v.WaitTime = (v.WaitTime - DateTime.Now.Subtract(v.SignInTime).TotalMinutes) + 1;
                    _context.Update(v);
                }
                _context.SaveChanges();
            };

            ViewData["BarberId"] = new SelectList(_context.Barbers, "BarberId", "FullName");
            ViewData["wait"] = _waitcalc
                .CalculateWait(activeVisitors, shop.CutTimeAverage)
                .ToLocalTime()
                .ToString("hh:mm tt");
            ViewData["ShopName"] = shop.ShopName;

            return View(new VisitsViewModel {
                Visits = _context.Visits.ToList(),
                Visit = visit,
                Barbers = _context.Barbers.ToList()
            });
        }
        public IActionResult Create(VisitsViewModel model)
        {
            if (ModelState.IsValid)
            {
                var visit = new Visit {
                    FirstName = model.Visit.FirstName,
                    LastName = model.Visit.LastName,
                    BarberId = model.Visit.BarberId,
                };
                visit.Barber = _context.Barbers.SingleOrDefault(x => x.BarberId == model.Visit.BarberId);

                var currentVisits = _context.Visits;
                var barbersVisitCount = currentVisits.Where(x => x.BarberId != null).GroupBy(g => g.BarberId)
                    .ToDictionary(gx => gx.Key, gx => gx.ToList());

                int activeVisitors = currentVisits.Count() -
                currentVisits.Where(x => x.isCheckedOff).Count();
                var shop = _context.Shops.First();

                if (visit.Barber != null)
                {
                    var bvc = 0;
                    if (!currentVisits.Any(x => x.BarberId == model.Visit.BarberId))
                    {
                        bvc = 0;
                    } else
                    {
                        bvc = barbersVisitCount[visit.BarberId].Count;
                    }
                    visit.WaitTime = _waitcalc
                                    .CalculateWaitPerVisit(activeVisitors,
                                                           shop.CutTimeAverage,
                                                           visit.Barber.AvgCutTime,
                                                           bvc);
                } else
                {
                    visit.WaitTime = (shop.CutTimeAverage * activeVisitors);
                }
                
                visit.SignInTime = DateTime.Now;
                _context.Visits.Add(visit);
                _context.SaveChanges();
                return RedirectToAction("Index");
            }
            return View("Index");
        }