internal void Welcome()
        {
            Console.Clear();
            Console.WriteLine("\n**************************************************************\n");
            Console.WriteLine("\t\t    The Tiger King Pet Shop");
            Console.WriteLine("\n**************************************************************\n");
            Console.WriteLine("Welcome to the console app for Tiger King Pet Shop!" +
                              "\nWe sell anything from fish, dogs, cats to exotic reptiles!!" +
                              "\nATTENTION: We not longer sell tigers due to pending law suits from \nBig Cat Rescue");
            Console.WriteLine("\nPlease select one of the options below:");
            Console.WriteLine("1. Login\n2. Create a new user account");
            if ((int.TryParse(Console.ReadLine(), out int userSelection)) && //input validation to check if selection is int and between 0~3
                userSelection < 3 && userSelection > 0)
            {
                switch (userSelection) //switch output for user selection
                {
                case 1:
                {
                    UserLogin test1 = new UserLogin();           //directs user to login page
                    test1.runLogin();
                    MainNavigation test7 = new MainNavigation(); //directs user back to this navigation page
                    test7.WhereToNavigation();
                    break;
                }

                case 2:
                {
                    UserRegistration test = new UserRegistration(); //directs user to registration page
                    test.runRegistration();
                    UserLogin test1 = new UserLogin();              //directs user to login page after registration
                    test1.runLogin();
                    MainNavigation test7 = new MainNavigation();    //directs user back to this navigation page
                    test7.WhereToNavigation();
                    break;
                }
                }
            }
 public void OrderHistory()
 {
     using (var db = new AppDbContext())
     {
         while (checking)
         {
             Console.Clear();
             Console.WriteLine("\n**************************************************\n");
             var locations = db.StoreLocations; //stores Storelocation table names into locations list
             foreach (var x in locations)       //prints all shop locations onto the console
             {
                 Console.WriteLine(x.StoreLocationId + "." + x.Location);
             }
             Console.WriteLine("\n**************************************************\n");
             Console.WriteLine("Select a location to see all orders placed there");
             int selectedLocation = 0;
             if (int.TryParse(Console.ReadLine(), out selectedLocation) &&
                 selectedLocation > 0 && selectedLocation < 6) //input validation to make sure user input is int
             {
                 try                                           //input validation to make sure input id matches database
                 {
                     dbOrders = db.UserOrders.Include(x => x.StoreLocation)
                                .Where(x => x.StoreLocation.StoreLocationId == selectedLocation); //stores user orders with store location included
                 }
                 catch (InvalidOperationException)                                                //format exception to catch if input is not int
                 {
                     Console.WriteLine("Please enter a NUMBER, enter to continue:");
                     Console.ReadLine();
                     continue; //returns to 'checking1' while loop
                 }
             }
             else
             {
                 Console.WriteLine("Invalid input, please enter to try again");
                 Console.ReadLine();
                 Console.Clear();
                 continue;
             }
             Console.Clear();
             while (checking1)
             {
                 Console.Clear();
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine("Order Id\t\tOrder Time\t\tLocation\n");
                 foreach (var x in dbOrders) //displays all user order for the selected location
                 {
                     Console.WriteLine($"{x.UserOrderId}\t\t{x.timeStamp}\t{x.StoreLocation.Location}");
                 }
                 Console.WriteLine("\n**************************************************");
                 Console.WriteLine("\nSelect the order Id to view its details");
                 try
                 {
                     selectedOrderId = int.Parse(Console.ReadLine());
                     db.UserOrders.Include(x => x.StoreLocation).Where(x => x.StoreLocation.StoreLocationId == selectedLocation)
                     .First(x => x.UserOrderId == selectedOrderId); //input validation for the selected order id
                 }
                 catch (FormatException)                            //format exception to catch if input is not int
                 {
                     Console.WriteLine("Please enter a NUMBER, enter to continue:");
                     Console.ReadLine();
                     continue;                     //returns to 'checking1' while loop
                 }
                 catch (InvalidOperationException) //invalid exception to catch if the input does not exist
                 {
                     Console.WriteLine("Please enter a valid Id, enter to continue:");
                     Console.ReadLine();
                     continue;       //returns to 'checking1' while loop
                 }
                 catch (Exception e) //any other exception caught, displays the exception error.
                 {
                     Console.WriteLine(e);
                     Console.WriteLine("Please enter a valid Id, enter to continue:");
                     Console.ReadLine();
                     continue;                                                               //returns to 'checking1' while loop
                 }
                 var userOrder1 = db.UserOrders.Where(x => x.UserOrderId == selectedOrderId) //store table for Userorder, userquant, and storeitem infos
                                  .Include(x => x.UserOrderQuantity)
                                  .Include(x => x.UserOrderItems)
                                  .ThenInclude(x => x.StoreItem);
                 var userOrdered = db.UserOrders.Include(x => x.UserInfo)
                                   .First(x => x.UserOrderId == selectedOrderId).UserInfo;
                 Console.Clear();
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine($"Order by: {userOrdered.fName} {userOrdered.lName}\n");
                 Console.WriteLine("Pet Name\t\t\tQuantity\n");
                 foreach (var x in userOrder1)
                 {
                     var test = x.UserOrderItems.Zip(x.UserOrderQuantity);
                     foreach (var i in test)                                                                     //foreach to display item name and quantity ordered
                     {
                         Console.WriteLine("{0,-20}{1,16}", i.First.StoreItem.itemName, i.Second.orderQuantity); //////////////////////////////////////////////////////
                     }
                 }
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine("Would you like to check a different order? Y/N");
                 string yesNo = Console.ReadLine();
                 if (yesNo == "Y" || yesNo == "y") //if statement to return back to 'checking1' while loop
                 {
                     continue;
                 }
                 else
                 {
                     checking1 = false; //exits the 'checking1' while loop
                 }
             }
             Console.WriteLine("Would you like to check a different location? Y/N");
             string yesNo1 = Console.ReadLine();
             if (yesNo1 == "Y" || yesNo1 == "y") //if statement to return back to the 'checking' while loop
             {
                 checking  = true;
                 checking1 = true;
                 continue;
             }
             else
             {
                 checking = false;
                 MainNavigation test7 = new MainNavigation();
                 test7.WhereToNavigation();
             }
         }
     }
 }
 public void OrderHistory()
 {
     using (var db = new AppDbContext())
     {
         while (checking1)
         {                                   //while loop for user to check other user's orders
             Console.Clear();
             var listOfUsers = db.UserInfos; //store userinfos into listOfUsers
             Console.WriteLine("\n**************************************************\n");
             Console.WriteLine("Id\t\tUsername\n");
             foreach (var user in listOfUsers) //display all user on console
             {
                 Console.WriteLine($"{user.UserInfoId}\t\t{user.userName}");
             }
             Console.WriteLine("\n**************************************************");
             Console.WriteLine("\nSelect the username Id to view their order histories");
             try
             {
                 selectedUserId = int.Parse(Console.ReadLine());
                 db.UserInfos.First(x => x.UserInfoId == selectedUserId); //input validation to check if entered ID exists in database
             }
             catch (FormatException)                                      //format exception to catch if input is not int
             {
                 Console.WriteLine("Please enter a NUMBER, enter to continue:");
                 Console.ReadLine();
                 continue;                     //returns to 'checking1' while loop
             }
             catch (InvalidOperationException) //invalid exception to catch if the input does not exist
             {
                 Console.WriteLine("Please enter a valid Id, enter to continue:");
                 Console.ReadLine();
                 continue;       //returns to 'checking1' while loop
             }
             catch (Exception e) //any other exception caught, displays the exception error.
             {
                 Console.WriteLine(e);
                 Console.WriteLine("Please enter a valid Id, enter to continue:");
                 Console.ReadLine();
                 continue; //returns to 'checking1' while loop
             }
             var userOrder = db.UserOrders.Include(x => x.StoreLocation)
                             .Where(x => x.UserInfo.UserInfoId == selectedUserId); //stores selected user order.
             while (checking)                                                      //while loop for user to check other orders of a user
             {
                 Console.Clear();
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine("Order Id\tOrder Time\t\tLocation\n");
                 foreach (var x in userOrder) //foreach to display all user orders
                 {
                     Console.WriteLine($"   {x.UserOrderId}\t\t{x.timeStamp}\t{x.StoreLocation.Location}");
                 }
                 Console.WriteLine("\n**************************************************");
                 Console.WriteLine("\nSelect the order Id to view its details");
                 try //input validation to make sure entered ID exists in database
                 {
                     selectedOrderId = int.Parse(Console.ReadLine());
                     db.UserOrders.Include(x => x.UserInfo).Where(x => x.UserInfo.UserInfoId == selectedUserId)
                     .First(x => x.UserOrderId == selectedOrderId);
                 }
                 catch (FormatException) //format exception to catch if input is not int
                 {
                     Console.WriteLine("Please enter a NUMBER, enter to continue:");
                     Console.ReadLine();
                     continue;                     //returns to 'checking1' while loop
                 }
                 catch (InvalidOperationException) //invalid exception to catch if the input does not exist
                 {
                     Console.WriteLine("Please enter a valid Id, enter to continue:");
                     Console.ReadLine();
                     continue;       //returns to 'checking1' while loop
                 }
                 catch (Exception e) //any other exception caught, displays the exception error.
                 {
                     Console.WriteLine(e);
                     Console.WriteLine("Please enter a valid Id, enter to continue:");
                     Console.ReadLine();
                     continue;                                                               //returns to 'checking1' while loop
                 }
                 var userOrder1 = db.UserOrders.Where(x => x.UserOrderId == selectedOrderId) //store table for Userorder, userquant, and storeitem infos
                                  .Include(x => x.UserOrderQuantity)
                                  .Include(x => x.UserOrderItems)
                                  .ThenInclude(x => x.StoreItem);
                 Console.Clear();
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine("Pet Name\t\t\tQuantity\n");
                 foreach (var x in userOrder1)                             //foreach to display item name and quantity ordered
                 {
                     var test = x.UserOrderItems.Zip(x.UserOrderQuantity); //zip to combine the two list (credit to Jayson)
                     foreach (var i in test)
                     {
                         Console.WriteLine("{0,-20}{1,16}", i.First.StoreItem.itemName, i.Second.orderQuantity);
                     }
                 }
                 Console.WriteLine("\n**************************************************\n");
                 Console.WriteLine("Would you like to check a different order? Y/N");
                 string yesNo = Console.ReadLine();
                 if (yesNo == "Y" || yesNo == "y") //if statement to loop through 'checking' while loop.
                 {
                     continue;
                 }
                 else
                 {
                     checking = false; //stops the 'checking' while loop
                 }
             }
             Console.WriteLine("Would you like to check orders from different user? Y/N");
             string yesNo1 = Console.ReadLine();
             if (yesNo1 == "Y" || yesNo1 == "y") //if statement to return back to 'checking1' while loop.
             {
                 checking = true;                //validate the 'checking' while loop again
                 continue;
             }
             else
             {
                 checking1 = false; //exits the main 'checking1' while loop
                 MainNavigation test7 = new MainNavigation();
                 test7.WhereToNavigation();
             }
         }
     }
 }
        public void OrderHistory()
        {
            using (var db = new AppDbContext())
            {
                while (checking1)
                {
                    Console.Clear();
                    Console.WriteLine("\n**************************************************\n");
                    Console.WriteLine("Please enter the first name of customer");
                    string fName = Console.ReadLine().ToLower();
                    Console.WriteLine("\nPlease enter the last name of customer");
                    string lName = Console.ReadLine().ToLower();
                    Console.WriteLine("\n**************************************************\n");
                    try
                    {
                        check = db.UserInfos.First(u => u.fName == fName && u.lName == lName); //checks if the user inputted name matches database
                    }
                    catch (InvalidOperationException)
                    {
                        Console.WriteLine("Please enter a valid user name, enter to continue:"); //returns to 'chicking1' while loop if exceptions were caught
                        Console.ReadLine();
                        continue;
                    }
                    catch (Exception e) //any other exception, print on console and return to 'checking1' while loop
                    {
                        Console.WriteLine(e);
                        Console.WriteLine("Please enter a valid user name, enter to continue:"); //returns to 'chicking1' while loop if exceptions were caught
                        Console.ReadLine();
                        continue;
                    }
                    var userOrder = db.UserOrders.Include(x => x.StoreLocation) //store user order with store location
                                    .Where(x => x.UserInfo.UserInfoId == check.UserInfoId);
                    while (checking)                                            //while loop to view other orders of the selected user
                    {
                        Console.Clear();
                        Console.WriteLine("\n**************************************************");
                        Console.WriteLine("\nOrder Id\tOrder Time\tLocation\n");
                        foreach (var x in userOrder) //displays all orders made by user
                        {
                            Console.WriteLine($"   {x.UserOrderId}\t\t{x.timeStamp}\t{x.StoreLocation.Location}");
                        }
                        Console.WriteLine("\n**************************************************\n");
                        Console.WriteLine("\nSelect the order Id to view its details");

                        try  //input validation to make sure entered order ID exists in database
                        {
                            selectedOrderId = int.Parse(Console.ReadLine());
                            db.UserOrders.Include(x => x.UserInfo).Where(x => x.UserInfo == check).First(x => x.UserOrderId == selectedOrderId);
                            //db.UserOrders.First(x => x.UserOrderId == selectedOrderId);
                        }
                        catch (FormatException) //format exception to catch if input is not int
                        {
                            Console.WriteLine("Please enter a NUMBER, enter to continue:");
                            Console.ReadLine();
                            continue;                     //returns to 'checking' while loop
                        }
                        catch (InvalidOperationException) //invalid exception to catch if the input does not exist
                        {
                            Console.WriteLine("Please enter a valid Id, enter to continue:");
                            Console.ReadLine();
                            continue;       //returns to 'checking' while loop
                        }
                        catch (Exception e) //any other exception caught, displays the exception error.
                        {
                            Console.WriteLine(e);
                            Console.WriteLine("Please enter a valid Id, enter to continue:");
                            Console.ReadLine();
                            continue;                                                               //returns to 'checking1' while loop
                        }
                        var userOrder1 = db.UserOrders.Where(x => x.UserOrderId == selectedOrderId) //store table for Userorder, userquant, and storeitem infos
                                         .Include(x => x.UserOrderQuantity)
                                         .Include(x => x.UserOrderItems)
                                         .ThenInclude(x => x.StoreItem);
                        Console.Clear();
                        Console.WriteLine("\n**************************************************\n");
                        Console.WriteLine("Pet Name\t\t\tQuantity\n");
                        foreach (var x in userOrder1) //foreach to display item name and quantity ordered
                        {
                            var test = x.UserOrderItems.Zip(x.UserOrderQuantity);
                            foreach (var i in test)
                            {
                                Console.WriteLine("{0,-20}{1,16}", i.First.StoreItem.itemName, i.Second.orderQuantity);
                            }
                        }
                        Console.WriteLine("\n**************************************************\n");
                        Console.WriteLine("Would you like to check a different order? Y/N");
                        string yesNo = Console.ReadLine();
                        if (yesNo == "Y" || yesNo == "y") //if statement to return back to the beginning while statement.
                        {
                            continue;
                        }
                        else
                        {
                            checking = false; //exits the 'checking' while loop
                        }
                    }
                    Console.WriteLine("Would you like to check orders from different user? Y/N");
                    string yesNo1 = Console.ReadLine();
                    if (yesNo1 == "Y" || yesNo1 == "y") //if statement to return back to the beginning while statement.
                    {
                        checking = true;
                        continue;
                    }
                    else
                    {
                        checking1 = false; //exits the main 'checking1' while loop
                        MainNavigation test7 = new MainNavigation();
                        test7.WhereToNavigation();
                    }
                }
            }
        }