public List <Order> findLocalOrderHistory()
        {
            DbStoreContext db       = new DbStoreContext();
            var            dbstores = db.StoreLocation.ToArray();
            ConsoleKey     response;

            //prompts user to enter location ID
            Console.WriteLine("Enter Location ID");
            foreach (var store in dbstores)
            {
                Console.WriteLine($"{store.StoreLocationID}: {store.City}");
            }



            StoreLocation find = new StoreLocation();

            //cycle through stores
            while (true)
            {
                response = Console.ReadKey().Key;
                if (response == ConsoleKey.D1)
                {
                    find.StoreLocationID = 1;
                    break;
                }
                else if (response == ConsoleKey.D2)
                {
                    find.StoreLocationID = 2;
                    break;
                }
                else if (response == ConsoleKey.D3)
                {
                    find.StoreLocationID = 3;
                    break;
                }
                else
                {
                    Console.WriteLine("invalid, please enter a know store id");
                }
            }



            //query Order and save results
            var searchResults = db.Order.Where(ord => ord.Storeid == find.StoreLocationID).ToList();

            return(searchResults);
        }
        public List <Cust> findUser()
        {
            DbStoreContext db       = new DbStoreContext();// set up dbcontext
            Cust           findUser = new Cust();

            while (true)
            {
                //prompts user to enter first name
                Console.WriteLine("Enter your first name");
                test = Console.ReadLine();
                //checks to make sure input is valid
                if (Regex.IsMatch(test, regNameTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use letters only for this field.");
            }
            //adds first name to user
            findUser.Fname = test;
            while (true)
            {
                //prompts user to enter last name
                Console.WriteLine($"Hi, {newUser.Fname}! Please enter your last name");
                test = Console.ReadLine();
                //checks input
                if (Regex.IsMatch(test, regNameTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use letters only for this field.");
            }
            //adds Last name
            findUser.Lname = test;
            var searchResults = db.Cust.Where(cust => cust.Fname == findUser.Fname && cust.Lname == findUser.Lname).ToList();

            return(searchResults);
        }
        public List <Order> findUserOrderHistory()
        {
            DbStoreContext db   = new DbStoreContext();// set up dbcontext
            Cust           find = new Cust();

            while (true)
            {
                //prompts user to enter id
                Console.WriteLine("Enter User ID");
                test = Console.ReadLine();
                //checks to make sure input is valid
                if (Regex.IsMatch(test, idTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use numbers only for this field.");
            }
            //adds id to user
            find.CustId = int.Parse(test);
            //get query results
            var searchResults = db.Order.Where(ord => ord.CustId == find.CustId).ToList();

            return(searchResults);
        }
        public void adjustInventory()
        {
            DbStoreContext db       = new DbStoreContext();
            var            dbstores = db.StoreLocation.ToArray();
            int            adjust;
            ConsoleKey     response;

            //prompts user to enter location ID
            Console.WriteLine("Enter Location ID");
            foreach (var store in dbstores)
            {
                Console.WriteLine($"{store.StoreLocationID}: {store.City}");
            }



            //Cycle through locations
            while (true)
            {
                response = Console.ReadKey().Key;
                if (response == ConsoleKey.D1)
                {
                    adjust = 1;
                    break;
                }
                else if (response == ConsoleKey.D2)
                {
                    adjust = 2;
                    break;
                }
                else if (response == ConsoleKey.D3)
                {
                    adjust = 3;
                    break;
                }
                else
                {
                    Console.WriteLine("invalid, please enter a know store id");
                }
            }
            //query products and store
            List <Product> dbInventory = db.Product.Where(prod => prod.StoreID == adjust).ToList();

            //prompt user to adjust quantity
            Console.WriteLine("Enter the name of the product would you like to adjust?");

            // loops for user to adjust quantity
            while (true)
            {
                int           i         = 0;
                List <string> inventory = new List <string>();


                foreach (Product p in dbInventory)
                {
                    Console.WriteLine($"{i}: {p.Name}");
                    inventory.Add(p.Name);
                    i++;
                }


                string prodName = Console.ReadLine();

                if (inventory.Contains(prodName))
                {
                    Console.WriteLine("What should the new Quantity be?");
                    var input = Console.ReadLine();

                    if (int.Parse(input) >= 0)
                    {
                        List <Product> dbProd = db.Product.Where(prod => prod.StoreID == adjust &&
                                                                 prod.Name == prodName).ToList();
                        dbProd[0].Quantity = int.Parse(input);
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Invalid Input");
                    }
                }
                else
                {
                    Console.WriteLine("Invalid input, please try again");
                }
            }
        }
        public Order createOrder()
        {
            DbStoreContext db = new DbStoreContext();// set up dbcontext

            Order      newOrder = new Order();
            ConsoleKey temp;
            var        input = "";

            //order creation loop
            while (true)

            {
                Console.WriteLine("What is your customer id?");
                input = Console.ReadLine();
                //checks input
                if (Regex.IsMatch(input, idTest))
                {
                    //pull out customer info
                    int id   = int.Parse(input);
                    var dbid = db.Cust.Where(cust => cust.CustId == id).ToList();
                    if (dbid.Count > 0)
                    {
                        Console.WriteLine("What Location would you like " +
                                          "to order from");
                        newOrder.CustId = id;
                        //cycle through storelocations
                        var dbstores = db.StoreLocation.ToArray();
                        foreach (var store in dbstores)
                        {
                            Console.WriteLine($"{store.StoreLocationID}: {store.City}");
                        }



                        //user chooses location
                        while (true)
                        {
                            temp = Console.ReadKey().Key;
                            if (temp == ConsoleKey.D1)
                            {
                                newOrder.Storeid = 1;
                                break;
                            }
                            else if (temp == ConsoleKey.D2)
                            {
                                newOrder.Storeid = 2;
                                break;
                            }
                            else if (temp == ConsoleKey.D3)
                            {
                                newOrder.Storeid = 3;
                                break;
                            }
                            else
                            {
                                Console.WriteLine("invalid, please enter a known store id");
                            }
                        }
                        //query and print a list of products
                        var dbinventory = db.Product.Where(prod => prod.StoreID == newOrder.Storeid);

                        Console.WriteLine("Here is a list of Products");

                        List <string> inv = new List <string>();
                        //print products
                        foreach (Product p in dbinventory)
                        {
                            Console.WriteLine(p.Name);
                            //get list of strings for comparison
                            inv.Add(p.Name);
                        }

                        while (true)
                        {
                            Console.WriteLine("Type the name of your desired product");
                            input = Console.ReadLine();
                            if (inv.Contains(input))
                            {
                                // "load product into variable"
                                List <Product> dbGet = db.Product.Where(prod => prod.Name == input).ToList();
                                Console.WriteLine("How many?");

                                input = Console.ReadLine();

                                //put product into the order
                                newOrder.Productid = dbGet[0].ProductID;
                                newOrder.MaxOrder  = dbGet[0].Quantity - 1;


                                if (int.Parse(input) > 0 && int.Parse(input) < newOrder.MaxOrder)
                                {
                                    //get quantity and adjust the products quantity
                                    newOrder.Quantity  = (int.Parse(input));
                                    dbGet[0].Quantity -= newOrder.Quantity;
                                    return(newOrder);
                                }
                                else
                                {
                                    Console.WriteLine("invalid quantity");
                                }
                            }
                            else
                            {
                                Console.WriteLine("invalid product");
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Sending you back to main menu");

                        runStore();
                    }
                }
                else
                {
                    Console.WriteLine("invalid input");
                }
            }
        }
        public void runStore()
        {
            DbStoreContext db     = new DbStoreContext(); // set up dbcontext
            bool           broken = true;                 // bool to get us out of loop
            ConsoleKey     input;                         // intial console key

            //Menu options
            string[] menu = new string[] { "Create new order", "Create new user",
                                           "Search User by name", "Look up your Order history", "Update inventory",
                                           "Create new product", "Look up location order history", "Exit Program" };
            Console.WriteLine("Welcome to the Outdoor Store");

            do
            {
                //loop through menu options
                for (int i = 0; i < menu.Length; i++)
                {
                    int num = i + 1;
                    Console.WriteLine(num + " " + menu[i]);
                }
                input = Console.ReadKey().Key;

                //Create Order
                if (input == ConsoleKey.D1)
                {   //initialize order
                    Order newOrder = createOrder();
                    //check that it is not null
                    if (newOrder == null)
                    {
                        Console.WriteLine();
                        Console.WriteLine($"Order cancelled.");
                    }

                    else if (newOrder != null)
                    {// Add new Order to the db
                        newOrder.OrderTime = DateTime.Now;
                        db.Add(newOrder);

                        db.SaveChanges();
                        Console.WriteLine();
                        Console.WriteLine($"Order added as order {newOrder.OrderID}");
                    }
                }



                //Create user
                else if (input == ConsoleKey.D2)
                {
                    newUser = createNewUser();
                    Console.WriteLine("Her is you User ID: " + newUser.CustId);
                }
                //User search
                else if (input == ConsoleKey.D3)
                {
                    List <Cust> searchResults = findUser();
                    if (searchResults.Count >= 1)
                    {
                        foreach (Cust p in searchResults)
                        {
                            //Print results
                            p.PrintUserInfo();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Loooks like nothing came up." +
                                          " Try to create a new user!");
                        Console.WriteLine();
                    }
                }
                //Location search
                else if (input == ConsoleKey.D4)
                {
                    List <Order> searchResults = findUserOrderHistory();


                    if (searchResults.Count >= 1)
                    {
                        //loop through to include product name
                        for (int i = 0; i < searchResults.Count; i++)
                        {
                            List <Product> hold = db.Product.Where(prod => prod.ProductID == searchResults[i].Productid).ToList();
                            Console.WriteLine(searchResults[i].ToString() + hold[i].Name);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Loooks like nothing came up." +
                                          " Try to create a new Order!");
                        Console.WriteLine();
                    }
                }
                //Adjust inventory
                else if (input == ConsoleKey.D5)
                {
                    adjustInventory();
                    //Update inventory
                }
                //create new Product
                else if (input == ConsoleKey.D6)
                {
                    createProduct();
                }
                //StoreLocation order history
                else if (input == ConsoleKey.D7)
                {
                    List <Order> searchResults = findLocalOrderHistory();


                    if (searchResults.Count >= 1)
                    {
                        //loops through to print out product names
                        for (int i = 0; i < searchResults.Count; i++)
                        {
                            List <Product> hold = db.Product.Where(prod => prod.ProductID == searchResults[i].Productid).ToList();
                            Console.WriteLine(searchResults[i].ToString() + hold[i].Name);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Loooks like nothing came up." +
                                          " Try to create a new order!");
                        Console.WriteLine();
                    }
                }

                //exit the loop

                else if (input == ConsoleKey.D8)
                {
                    broken = false;
                    Console.WriteLine();
                    Console.WriteLine(broken);
                }


                else
                {
                    Console.WriteLine(broken);
                    Console.WriteLine("Whoops. Please press a valid key");
                }
            } while (broken == true);
        }
        public Product createProduct()
        {
            DbStoreContext db = new DbStoreContext();// set up dbcontext
            ConsoleKey     response;
            var            test = "";

            while (true)
            {
                Console.WriteLine("What would you like to call the new Product?");
                test = Console.ReadLine();

                //checks input
                if (Regex.IsMatch(test, regProductTest))
                {//add product name
                    newProduct.Name = test;
                    Console.WriteLine("How much should it cost?");
                    test = Console.ReadLine();
                    //checks input
                    if (Regex.IsMatch(test, regPriceTest))
                    {// adds price
                        newProduct.Price = double.Parse(test);
                        Console.WriteLine("Where should we stock the product?" +
                                          " Enter a store ID please");
                        var dbstores = db.StoreLocation.ToArray();
                        foreach (var store in dbstores)
                        {
                            //print store options
                            Console.WriteLine($"{store.StoreLocationID}: {store.City}");
                        }



                        //user chooses a location
                        while (true)
                        {
                            response = Console.ReadKey().Key;
                            if (response == ConsoleKey.D1)
                            {
                                newProduct.StoreID = 1;
                                break;
                            }
                            else if (response == ConsoleKey.D2)
                            {
                                newProduct.StoreID = 2;
                                break;
                            }
                            else if (response == ConsoleKey.D3)
                            {
                                newProduct.StoreID = 3;
                                break;
                            }
                            else
                            {
                                Console.WriteLine("invalid, please enter a know store id");
                            }
                        }

                        //get a quantity for the product
                        while (true)
                        {
                            Console.WriteLine("How many should we stock?");
                            test = Console.ReadLine();
                            if (int.Parse(test) > 0)
                            {
                                newProduct.Quantity = int.Parse(test);
                                Console.WriteLine(newProduct.ToString());
                                break;
                            }
                            else
                            {
                                Console.WriteLine("invalid input");
                            }
                        }
                        while (true)
                        {
                            //confirm product info
                            Console.WriteLine("Is this information correct?");
                            Console.WriteLine("Press Y to confirm");
                            Console.WriteLine("Press N to restart the form");
                            Console.WriteLine("Press C to cancel");

                            response = Console.ReadKey(false).Key;
                            if (response == ConsoleKey.Y)
                            {
                                //save to db
                                Console.WriteLine();
                                db.Add(newProduct);
                                db.SaveChanges();
                                return(newProduct);
                            }
                            if (response == ConsoleKey.N)
                            {
                                Console.WriteLine();
                                return(this.createProduct());
                            }
                            if (response == ConsoleKey.C)
                            {
                                break;
                            }
                            newStore.Products.Add(newProduct);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid input. Please use numbers only");
                    }
                }
                else
                {
                    Console.WriteLine("Invalid input. Please use letters only");
                }
            }
        }
        /* This method creates a new user and adds them to the database*/
        public Cust createNewUser()
        {
            DbStoreContext db = new DbStoreContext();// set up dbcontext

            //previous check to see if db was working
            //var user1 = db.Cust.FirstOrDefault();
            //Console.WriteLine($"The user is {user1.CustId},{user1.Fname},{user1.Lname},{user1.State}");


            // Loop contains the user to ensure they finish their profile
            while (true)
            {
                //  prompts user to enter first name
                Console.WriteLine("Hi! Please enter your first name?");
                test = Console.ReadLine();
                // checks to make sure input is valid
                if (Regex.IsMatch(test, regNameTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use letters only for this field.");
            }
            //adds first name to user
            newUser.Fname = test;
            while (true)
            {
                //  prompts user to enter last name
                Console.WriteLine($"Hi, {newUser.Fname}! Please enter your last name");
                test = Console.ReadLine();
                //checks input
                if (Regex.IsMatch(test, regNameTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use letters only for this field.");
            }
            //adds last name
            newUser.Lname = test;

            while (true)
            {
                //checks input
                Console.WriteLine("Please enter your address");
                test = Console.ReadLine();
                if (Regex.IsMatch(test, regAddressTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use alphanumeric characters only.");
            }
            //adds address
            newUser.Address = test;


            while (true)
            {
                //checks input
                Console.WriteLine("Please enter your current city");
                test = Console.ReadLine();
                if (Regex.IsMatch(test, regCityTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please use letters only for this field.");
            }
            //adds city
            newUser.City = test;

            while (true)
            {
                //checks input
                Console.WriteLine("Please enter the abbreviation for your current state");
                test = Console.ReadLine();
                if (stateAbbreviations.Contains(test.ToUpper()))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please enter valid abbreviation.");
            }
            //adds state
            newUser.State = test;

            while (true)
            {
                //checks input
                Console.WriteLine("Please enter your Zip Code ");
                test = Console.ReadLine();
                if (Regex.IsMatch(test, regZipTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please enter 5 numbers.");
            }
            //adds zipcode
            newUser.Zipcode = test;

            while (true)
            {
                //checks input
                Console.WriteLine("Please enter your cell phone number");
                test = Console.ReadLine();
                if (Regex.IsMatch(test, regCellTest))
                {
                    break;
                }
                Console.WriteLine("Invalid input. Please enter a 10-digit number with no dashes.");
            }
            //adds cellphone
            newUser.Cell = "(" + test.Substring(0, 3) + ") " + test.Substring(3, 3) + "-" + test.Substring(6, 4);


            while (true)
            {
                //checks input
                Console.WriteLine("Please enter your email address");
                test = Console.ReadLine();
                if (Regex.IsMatch(test, regEmailTest))
                {
                    break;
                }
                Console.WriteLine("Invalid Email address. Please try again.");
            }
            //adds email
            newUser.Email = test;
            //print info
            newUser.PrintUserInfo();
            ConsoleKey response;

            //confirm info with user
            do
            {
                Console.WriteLine("Is this information correct?");
                Console.WriteLine("Press Y to confirm");
                Console.WriteLine("Press N to restart the form");
                Console.WriteLine("Press C to cancel");

                response = Console.ReadKey(false).Key;
                if (response == ConsoleKey.Y)
                {// adds to db
                    Console.WriteLine();
                    db.Add(newUser);
                    db.SaveChanges();
                    return(newUser);
                }
                if (response == ConsoleKey.N)
                {//returs to start
                    Console.WriteLine();
                    return(this.createNewUser());
                }
                if (response == ConsoleKey.C)
                {
                    break;
                }
            } while (response != ConsoleKey.Y && response != ConsoleKey.N && response != ConsoleKey.C);
            return(null);
        }