//
        // GET: /Home/
        public ActionResult Index(string searchString, string category)
        {
           
           var mySearcher = new Searcher();
           var myComponentDataUtil = new ComponentDataUtil();
           var myComponentList = new List<Component>();
           var myComponents = new Components();


            if (!String.IsNullOrEmpty(searchString))
            {
                var SearchTags = mySearcher.SplitString(searchString);
               
                foreach (var component in  myComponentDataUtil.GetComponents(SearchTags))
                {
                    myComponents._components.Add(component);
                }
                
            }
            else
            {
                if (!String.IsNullOrEmpty(category))
                {
                    foreach (var component in myComponentDataUtil.GetAllComponents())
                    {
                        if (component.Category == category)
                            myComponents._components.Add(component);
                    }
                }
                else
                {
                    foreach (var component in myComponentDataUtil.GetAllComponents())
                    {
                            myComponents._components.Add(component);
                    }
                }
                
                
            }


            var resultList=myComponents.GetAllCategories();
            resultList.Sort();
            var noneFound= new List<string>();
            noneFound.Add("Ingen kategorier fundet");
            if (resultList.Count != 0)
                ViewData["Categories"] = resultList;
            else
                ViewData["Categories"] = noneFound;


            return View(myComponents._components.OrderBy(c=>c.ComponentName).DistinctBy(c => c.SerieNr).ToList());
        }
     //[AllowAnonymous]
     public ActionResult Reserve()
     {
         var mySearcher = new Searcher();
         var myComponentDataUtil = new ComponentDataUtil();
         var myComponents = new Components();

         // Tjekker om der er indtastet en s�gning, hvis ja, hentes en komponentliste med de indtastede tags
         if (!String.IsNullOrEmpty(Session["User"].ToString()))
         {
             var studieNr = mySearcher.SplitString(Session["User"].ToString());

             foreach (var component in myComponentDataUtil.GetComponents(studieNr))
             {
                 myComponents._components.Add(component);
             }

         }

         return View(myComponents._components.OrderBy(c => c.ComponentName).ToList());
     }
        //
        // GET: /Home/
        public ActionResult Index(string searchString, string category, int? page)
        {
           var componentsPerPage = new int?();
           var mySearcher = new Searcher();
           var myComponentDataUtil = new ComponentDataUtil();
           var myComponents = new Components();
           var emptyComponent = new Component();
           var listOfQuantity = new List<int>();

            emptyComponent.ComponentName="Ingen Komponenter Fundet";
            componentsPerPage = 20;

            // Tjekker om der er indtastet en søgning, hvis ja, hentes en komponentliste med de indtastede tags
            if (!String.IsNullOrEmpty(searchString))
            {
                var SearchTags = mySearcher.SplitString(searchString);
               
                foreach (var component in  myComponentDataUtil.GetComponents(SearchTags))
                {
                    myComponents._components.Add(component);
                }
                
            }
            else
            {

            //Tjekker om man har trykket på en kategori, hvis ja, hentes en komponentliste med den kategori
                if (!String.IsNullOrEmpty(category))
                {
                    foreach (var component in myComponentDataUtil.GetAllComponents())
                    {
                        if (component.Category == category)
                            myComponents._components.Add(component);
                    }
                }
                else
                {
                    foreach (var component in myComponentDataUtil.GetAllComponents())
                    {
                            myComponents._components.Add(component);
                    }
                }
                
                
            }

           //Opretter liste med alle kategorier
            var listOfCategories=myComponents.GetAllCategories();

            //Sætter listen med kategorier i alfabetisk rækkefølge
            listOfCategories.Sort();
           
            //Opretter liste til hvis der ikke eksisterer nogen kategorier
            var noneFound= new List<string> {"Ingen kategorier fundet"};
            
            
            if (listOfCategories.Count != 0)
                ViewData["Categories"] = listOfCategories;
            else
                ViewData["Categories"] = noneFound;

            //Sorterer listen med komponenter, så den er i alfabetisk rækkefølge og komponenterne kun ankommer en gang.
            var sortedList = myComponents._components.OrderBy(c => c.ComponentName).DistinctBy(c => c.ComponentName).ToList();

            //Udregner hvor mange sider, der skal være på hjemmesiden
            ViewData["NumberOfPages"] = (sortedList.Count + componentsPerPage - 1) / componentsPerPage;

            //Udregner hvor mange der er af hver komponent type(taget ud af Componentname), lægger det derefter over i en ny liste

            foreach (var component in sortedList)
            {
                listOfQuantity.Add(myComponents.GetAvailableQuantity(component.ComponentName));
            }
            

            //Hvis dette tjek går igennem, er der ikke nok komponenter til at vise den ønskede side
            if (((componentsPerPage * page.GetValueOrDefault())) >= sortedList.Count || page < 0)
            {
                myComponents._components.Clear();
                myComponents._components.Add(emptyComponent);
                listOfQuantity.Clear();
                listOfQuantity.Add(0);
                return View(myComponents._components);
            }

            ViewData["AvailableQuantity"] = listOfQuantity;
                
            //Hvis dette tjek går igennem har man komponenter til overs, men ikke nok til at lave en "hel" side
            if(((componentsPerPage*page.GetValueOrDefault())+componentsPerPage)>sortedList.Count)
                return View(sortedList.GetRange((page * componentsPerPage).GetValueOrDefault(), sortedList.Count - (componentsPerPage * page).GetValueOrDefault()));
            //Returnerer componentsPerPage, startende fra den side man er kommet til
                return View(sortedList.GetRange(((page * componentsPerPage).GetValueOrDefault()), componentsPerPage.GetValueOrDefault()));
        }