/// <summary>
        /// descending quick sort by total visitor using recusrion
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public List <ReportsWeekly> QuickSortByTotalVisitor(List <ReportsWeekly> list)
        {
            if (list.Count <= 1)
            {
                return(list);
            }

            Random random                = new Random();
            List <ReportsWeekly> less    = new List <ReportsWeekly>();
            List <ReportsWeekly> greater = new List <ReportsWeekly>();

            int           pos   = random.Next(list.Count);
            ReportsWeekly pivot = list[pos];

            list.RemoveAt(pos);

            foreach (ReportsWeekly item in list)
            {
                double totalTimeSpent      = item.TotalTimeSpent;
                double totalTimeSpentPivot = pivot.TotalTimeSpent;
                if (totalTimeSpent < totalTimeSpentPivot)
                {
                    less.Add(item);
                }
                else
                {
                    greater.Add(item);
                }
            }
            return(ConcatWeekly(QuickSortByTotalVisitor(less), pivot, QuickSortByTotalVisitor(greater)));
        }
        public List <ReportsWeekly> ConcatWeekly(List <ReportsWeekly> less, ReportsWeekly pivot, List <ReportsWeekly> greater)
        {
            List <ReportsWeekly> sorted = new List <ReportsWeekly>(greater);

            sorted.Add(pivot);

            foreach (ReportsWeekly i in less)
            {
                sorted.Add(i);
            }

            return(sorted);
        }
        private List <ReportsWeekly> GetWeekReport(List <VisitorsInformation> list)
        {
            List <ReportsWeekly> resultList = new List <ReportsWeekly>();
            ReportsWeekly        monday     = new ReportsWeekly
            {
                Day            = "Monday",
                TotalVisitor   = 0,
                TotalTimeSpent = 0
            };
            ReportsWeekly tuesday = new ReportsWeekly
            {
                Day            = "Tuesday",
                TotalVisitor   = 0,
                TotalTimeSpent = 0
            };
            ReportsWeekly wednesday = new ReportsWeekly
            {
                Day            = "Wednesday",
                TotalVisitor   = 0,
                TotalTimeSpent = 0
            };
            ReportsWeekly thursday = new ReportsWeekly
            {
                Day            = "Thursday",
                TotalVisitor   = 0,
                TotalTimeSpent = 0
            };
            ReportsWeekly friday = new ReportsWeekly
            {
                Day            = "Friday",
                TotalVisitor   = 0,
                TotalTimeSpent = 0
            };

            foreach (VisitorsInformation i in list)
            {
                var date = DateTime.ParseExact(i.EntryDate, "dd/mm/yyyy", CultureInfo.InvariantCulture);
                int day  = (int)date.DayOfWeek;

                switch (day)
                {
                case 1:
                    monday.TotalVisitor++;
                    monday.TotalTimeSpent = monday.TotalTimeSpent + i.TotalDuration;
                    break;

                case 2:
                    tuesday.TotalVisitor++;
                    tuesday.TotalTimeSpent = tuesday.TotalTimeSpent + i.TotalDuration;
                    break;

                case 3:
                    wednesday.TotalVisitor++;
                    wednesday.TotalTimeSpent = wednesday.TotalTimeSpent + i.TotalDuration;
                    break;

                case 4:
                    thursday.TotalVisitor++;
                    thursday.TotalTimeSpent = thursday.TotalTimeSpent + i.TotalDuration;
                    break;

                case 5:
                    friday.TotalVisitor++;
                    friday.TotalTimeSpent = friday.TotalTimeSpent + i.TotalDuration;
                    break;

                default:
                    break;
                }
            }

            resultList.Add(monday);
            resultList.Add(tuesday);
            resultList.Add(wednesday);
            resultList.Add(friday);
            resultList.Add(thursday);
            return(resultList);
        }