public Boolean Registration()
        {
            string cNo;
            int    role;
            string fname;
            string lname;
            string email;
            string password;
            string confirmPass;

            Console.WriteLine("Please Register Below...\n");
            Console.Write("Enter your first Name: ");
            fname = Console.ReadLine();
            while (!Validators.isValidString(fname)) //check if the user entered letters only
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Enter a valid name");
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("Enter your first Name: ");
                fname = Console.ReadLine();
            }

            Console.Clear();
            Console.Write("Enter your Last Name: ");
            lname = Console.ReadLine();
            while (!Validators.isValidString(lname))  //check if the user entered letters only
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Enter a valid last name");
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("Enter your first Name: ");
                lname = Console.ReadLine();
            }

            Console.Clear();
            Console.Write("Enter your Email Address: ");
            email = Console.ReadLine();

            bool emailInvalid = true;

            do
            {
                bool valid = Validators.isValidEmail(email);
                if (valid)
                {
                    if (Database.Instance.EmailExists(email))
                    {
                        Console.Clear();
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("The email " + email + " already Exists");
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.Write("Enter your Email Address: ");
                        email = Console.ReadLine();
                    }
                    else
                    {
                        emailInvalid = false;
                    }
                }
                else
                {
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Please enter a valid email address.");
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write("Enter your Email Address: ");
                    email = Console.ReadLine();
                }
            } while(emailInvalid);

            Console.Clear();
            Console.Write("Enter your Phone Number: ");
            cNo = Console.ReadLine();
            while (!Validators.isPhoneNumber(cNo))  //validate if the user enters a valid contact details
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Invalid Contact Details");
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("Enter your Phone Number: ");
                cNo = Console.ReadLine();
            }

            role = chooseUserRoleMenu();

            if (role == -1)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Registration cancelled\n");
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
                return(false);
            }

            Console.Clear();
password:
            Console.Write("Enter Password: "******"Password must at least:\n* Be 8 characters long\n* Contain an uppercase and lowercase\n* Contain a number\n* Contain a symbol/special character\n");
                Console.ForegroundColor = ConsoleColor.White;
                goto password;
            }

            Console.Clear();
            Console.Write("Confirm Password: "******"\n\nPassword does not match\n");
                Console.ForegroundColor = ConsoleColor.White;
                goto password;
            }

            User registrationUser = new User(0, fname, lname, email, password, cNo, role);

            if (registerOrCancelMenu(registrationUser) > 0)
            {
                if (Database.Instance.Register(registrationUser))
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Account has been created Successfully\n");
                    Console.ForegroundColor = ConsoleColor.White;
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Registration cancelled\n");
                Console.ForegroundColor = ConsoleColor.White;
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey(true);
            return(true);
        }
        public static void ManageProfile()//A method that allow the user to update their inforomation
        {
            string firstName = "";
            string lastName  = "";
            string email     = "";
            string cell      = "";

            bool showMenu = true;
            int  option   = 1;

            //This is a menu that shows what information the user wants to change, i.e. the First Name, Last Name, Email.
            while (showMenu)
            {
                Console.Clear();
                Console.WriteLine("Choose from the following options: ");
                Console.WriteLine("Use Up arrow and Down arrow to move, enter/spacebar to select");
                //The updating first name option
                if (option == 1)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("*  ");
                    Console.Write("Update first name\n");
                    Console.ResetColor();
                }
                else
                {
                    Console.Write("   ");
                    Console.Write("Update first name\n");
                }
                //The updating last name option
                if (option == 2)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("*  ");
                    Console.Write("Update last name\n");
                    Console.ResetColor();
                }
                else
                {
                    Console.Write("   ");
                    Console.Write("Update last name\n");
                }
                //The updating email option
                if (option == 3)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("*  ");
                    Console.Write("Update email\n");
                    Console.ResetColor();
                }
                else
                {
                    Console.Write("   ");
                    Console.Write("Update email\n");
                }
                //The updating cellphone number option
                if (option == 4)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("*  ");
                    Console.Write("Update cellphone number\n");
                    Console.ResetColor();
                }
                else
                {
                    Console.Write("   ");
                    Console.Write("Update cellphone number\n");
                }
                if (option == 5)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("*  ");
                    Console.WriteLine("Exit\n");
                    Console.ResetColor();
                }
                else
                {
                    Console.Write("   ");
                    Console.WriteLine("Exit\n");
                }

                switch (Console.ReadKey().Key)
                {
                case ConsoleKey.UpArrow:

                    if (option != 1)
                    {
                        option--;
                    }
                    Console.Clear();
                    break;

                case ConsoleKey.DownArrow:
                    if (option != 5)
                    {
                        option++;
                    }
                    Console.Clear();
                    break;

                case ConsoleKey.Enter:
                case ConsoleKey.Spacebar:
                    Console.Clear();
                    //The options which allow the user to change/update their information
                    switch (option)
                    {
                    //Update their First Name
                    case 1:
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("You are updating your first name: " + Authenticate.Instance.User.first_name);
                        Console.WriteLine("\nEnter your first name");
                        firstName = Console.ReadLine();
                        while (string.IsNullOrEmpty(firstName) || string.IsNullOrWhiteSpace(firstName) || !Validators.isValidString(firstName))
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\n First name is invalid!");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a valid first name: ");
                            firstName = Console.ReadLine();
                        }
                        //Checks if the first name of the user is the same as in the database
                        while (firstName == Authenticate.Instance.User.first_name)
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nFirst name is already saved ");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a different first name: ");
                            firstName = Console.ReadLine();
                        }
                        Database.Instance.updateProfileField(firstName, UpdateProfileField.FirstName);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("\nYour updated first name is: " + Authenticate.Instance.User.first_name);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("Your detail:\n");
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("First name: " + Authenticate.Instance.User.first_name);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("Last name: " + Authenticate.Instance.User.last_name);
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.email);
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.cellphone_number);

                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey(true);
                        break;

                    //Updating the user Last Name
                    case 2:
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("You are updating your last name: " + Authenticate.Instance.User.last_name);
                        Console.WriteLine("\nEnter your last name");
                        lastName = Console.ReadLine();
                        while (string.IsNullOrEmpty(lastName) || string.IsNullOrWhiteSpace(lastName) || !Validators.isValidString(firstName))
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nLast name is invalid!");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a valid last name: ");
                            lastName = Console.ReadLine();
                        }
                        //Checks if the last name of the user is the same as in the database
                        while (lastName == Authenticate.Instance.User.last_name)
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nLast name is already saved ");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a different last name: ");
                            lastName = Console.ReadLine();
                        }

                        Database.Instance.updateProfileField(lastName, UpdateProfileField.LastName);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("\nYour updated last name is: " + Authenticate.Instance.User.last_name);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("Your detail\n");

                        Console.WriteLine("First name: " + Authenticate.Instance.User.first_name);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Last name: " + Authenticate.Instance.User.last_name);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.email);
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.cellphone_number);

                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey(true);
                        break;

                    //Updating the email
                    case 3:
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("You are updating your email: " + Authenticate.Instance.User.email);
                        Console.WriteLine("\nEnter your email: ");
                        email = Console.ReadLine();

                        while (string.IsNullOrEmpty(email) ||
                               string.IsNullOrWhiteSpace(email) ||
                               !Validators.isValidEmail(email))
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nEmail is invalid!");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a valid email: ");
                            email = Console.ReadLine();
                        }
                        while (Database.Instance.EmailExists(email))
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nEmail is already saved");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a different email: ");
                            email = Console.ReadLine();
                        }
                        Database.Instance.updateProfileField(email, UpdateProfileField.Email);

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("\nYour updated email is: " + Authenticate.Instance.User.email);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("Your detail:\n");
                        Console.WriteLine("First name: " + Authenticate.Instance.User.first_name);
                        Console.WriteLine("Last name: " + Authenticate.Instance.User.last_name);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.email);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.cellphone_number);

                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey(true);
                        break;

                    //Updating the cellphone number
                    case 4:
                        Console.WriteLine("**********************************************");
                        Console.WriteLine("You are updating your cell phone number to: " + Authenticate.Instance.User.cellphone_number);
                        Console.WriteLine("\nEnter your cellphone number: ");
                        cell = Console.ReadLine();
                        while (Validators.isPhoneNumber(cell) != true || string.IsNullOrEmpty(cell) ||
                               string.IsNullOrWhiteSpace(cell) || !Validators.isPhoneNumber(cell))
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nInvalid Contact Details");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nEnter your Phone Number: ");
                            cell = Console.ReadLine();
                        }
                        while (cell == Authenticate.Instance.User.cellphone_number)
                        {
                            Console.Clear();
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nCellphone number already exists");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("\nPlease enter a different Cellphone number: ");
                            cell = Console.ReadLine();
                        }

                        Database.Instance.updateProfileField(cell, UpdateProfileField.ContactNo);

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("\nYour updated cellphone number is: " + Authenticate.Instance.User.cellphone_number);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("**********************************************");

                        Console.WriteLine("Your detail:\n");
                        Console.WriteLine("First name: " + Authenticate.Instance.User.first_name);
                        Console.WriteLine("Last name: " + Authenticate.Instance.User.last_name);
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.email);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Email address: " + Authenticate.Instance.User.cellphone_number);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey(true);
                        break;

                    case 5:
                        Console.WriteLine("\nExiting...");
                        showMenu = false;
                        break;
                    }
                    //If the user wants to continue or proceed with other tasks
                    break;

                default:
                    Console.WriteLine("\nInvalid key, use Up/Down arrow to move, enter/spacebar to select");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey(true);
                    break;
                }
            }
        }