示例#1
0
        static void Main(string[] args)
        {
            Console.TreatControlCAsInput = true;                  // Disable Ctrl+C from exiting console

            MenuManager     menus        = new MenuManager();     // instantiate object with all the menus
            DataBaseManager dBManager    = new DataBaseManager(); // instantiate object to access the database
            InputManager    inputManager = new InputManager();    // instantiate object to handle user input from console

            MessageManager messageManager = new MessageManager(); // instantiate object to handle user messagess

            do
            {
                MainMenuOptions mainMenuChoice = menus.MainMenu(); // run the Main Menu. Returns Enum when Enter is pressed
                // Login, Signup, Info, Exit

                switch (mainMenuChoice)
                {
                //==========================================================================================================//
                //==========================================================================================================//
                case MainMenuOptions.Login:
                    bool userExists = false;
                    //
                    bool userActive;
                    //

                    string usernameLogin;
                    menus.LoginMenu();                                           // Includes console clear and welcome message
                    usernameLogin = inputManager.InputUserName();                // Returns a string or null if ESC is pressed

                    if (usernameLogin != null)                                   // if username is received
                    {
                        userExists = dBManager.DoesUsernameExist(usernameLogin); // checks if username exists in database
                        if (!userExists)
                        {
                            Console.ForegroundColor = ConsoleColor.Magenta;
                            Console.WriteLine("The username you entered does not exist in the database. Please SignUp.");
                            Console.WriteLine("Press any key to go back to the Main Menu.");
                            Console.ResetColor();
                            Console.ReadKey();
                            break;
                        }
                        else                                                    // username exists in database, continue to ask for password
                        {
                            userActive = dBManager.IsUserActive(usernameLogin); // check if user is active

                            if (!userActive)                                    // user not active
                            {
                                Console.ForegroundColor = ConsoleColor.Red;
                                Console.WriteLine($"The user with username '{usernameLogin}' is no longer active.");
                                Console.WriteLine("Press any key to go back");
                                Console.ReadKey();
                                Console.ResetColor();
                                break;
                            }

                            Console.WriteLine($"\nWelcome {usernameLogin}!");
                            Console.WriteLine("\nPlease enter your password.");
                            int    numberOfAttemps    = 0; // Holds the number of attemps for password input
                            int    maxNumberOfAttemps = 3;
                            string passwordLogin;
                            bool   isPasswordCorrect = false;
                            while (!isPasswordCorrect && numberOfAttemps < maxNumberOfAttemps)
                            {
                                passwordLogin     = inputManager.InputLoginPassword(); // only checks against zero length
                                numberOfAttemps  += 1;
                                isPasswordCorrect = dBManager.IsPasswordCorrect(usernameLogin, passwordLogin);
                                if (!isPasswordCorrect)
                                {
                                    Console.ForegroundColor = ConsoleColor.Red;
                                    Console.WriteLine("Wrong password. Try again.");
                                    Console.ResetColor();
                                }
                            }
                            if (!isPasswordCorrect && (numberOfAttemps == maxNumberOfAttemps))
                            {
                                Console.ForegroundColor = ConsoleColor.Magenta;
                                Console.WriteLine("Maximum number of attemps reached!");
                                Console.ResetColor();
                                Console.WriteLine("\nPress any key to go back.");
                                Console.ReadKey();
                                break;     // exits the switch, back to main loop
                            }
                            if (isPasswordCorrect)
                            {
                                Console.ForegroundColor = ConsoleColor.Green;
                                Console.WriteLine($"Correct Password.");
                                Console.ResetColor();

                                Console.ForegroundColor = ConsoleColor.Blue;
                                Console.WriteLine("\nPress ESC to log out, Ctrl Q to exit or Enter to proceed to User Menu.");
                                Console.ResetColor();
                                //============================  ADMIN EDW PERA PREPEI NA MPEI SWITCH   ============================================================//
                                ExitOptions userExitOption = inputManager.InputExitChoice();
                                switch (userExitOption)
                                {
                                case ExitOptions.Esc:
                                    Console.Clear();
                                    Console.WriteLine("\nLogging out...");
                                    System.Threading.Thread.Sleep(700);         // wait a bit...
                                    break;

                                case ExitOptions.CtrlQ:
                                    Console.Clear();
                                    Console.WriteLine("\nClosing application...");
                                    Environment.Exit(0);
                                    break;

                                case ExitOptions.Enter:
                                    //============================  ADMIN EDW PERA PREPEI NA MPEI SWITCH   ============================================================//
                                    // Log in user <-- MALON DEN XREIAZETAI
                                    //dBManager.LogInUser(usernameLogin);
                                    //bool islogged = dBManager.IsLoggedIn(usernameLogin);
                                    bool isLogged = true;

                                    //
                                    UserTypes userType = dBManager.GetUserType(usernameLogin);         //check user type

                                    switch (userType)
                                    {
                                    case UserTypes.SimpleUser:
                                        do
                                        {
                                            UserMenuOptions userMenuOption = menus.UserMenu(usernameLogin);
                                            switch (userMenuOption)
                                            {
                                            case UserMenuOptions.CreateNewMessage:                 // OK
                                                Console.Clear();
                                                Console.WriteLine("======= Create new Message =======");
                                                Console.WriteLine();
                                                Console.WriteLine("Please type the username of the recipient of the message:\n");
                                                string recipient = inputManager.InputUserName();

                                                if (recipient is null)                 //if ESC is pressed
                                                {
                                                    break;
                                                }

                                                // check if recipient username exists in database
                                                bool recipientExists = dBManager.DoesUsernameExist(recipient);
                                                if (!recipientExists)
                                                {
                                                    Console.ForegroundColor = ConsoleColor.Magenta;
                                                    Console.WriteLine();
                                                    Console.WriteLine($"A user with username '{recipient}' does not exist.");
                                                    Console.ForegroundColor = ConsoleColor.Blue;
                                                    Console.WriteLine("\nPress any key to go back to the user menu");
                                                    Console.ResetColor();
                                                    Console.ReadKey();
                                                }
                                                else                 // the recipient exists. Go on to create and send message
                                                {
                                                    // check if recipient is active
                                                    bool recipientActive = dBManager.IsUserActive(recipient);
                                                    if (!recipientActive)
                                                    {
                                                        Console.ForegroundColor = ConsoleColor.Red;
                                                        Console.WriteLine("\nThe recipient you chose is no longer active.");
                                                        Console.WriteLine("Try sending a message to another user.");
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                    else
                                                    {
                                                        messageManager.CreateMessage(usernameLogin, recipient);
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                    //
                                                    //messageManager.CreateMessage(usernameLogin, recipient);
                                                    //Console.ForegroundColor = ConsoleColor.Blue;
                                                    //Console.WriteLine("\nPress any key to go back to the user menu");
                                                    //Console.ResetColor();
                                                    //Console.ReadKey();
                                                }
                                                break;

                                            case UserMenuOptions.Inbox:                 // OK
                                                messageManager.ShowInbox(usernameLogin);
                                                break;

                                            case UserMenuOptions.SentMessages:                 // OK
                                                messageManager.ShowSentMessages(usernameLogin);
                                                break;

                                            case UserMenuOptions.Info:                  // OK
                                                dBManager.GetUserInfo(usernameLogin);
                                                Console.ForegroundColor = ConsoleColor.Blue;
                                                Console.WriteLine("\nPress any key to go back");
                                                Console.ResetColor();
                                                Console.ReadKey();
                                                break;

                                            case UserMenuOptions.ExitToMain:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nLogging out...");
                                                System.Threading.Thread.Sleep(700);                 // wait for 0.7 seconds
                                                break;

                                            case UserMenuOptions.Quit:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nClosing application...");
                                                Environment.Exit(0);
                                                break;
                                            }             // end of switch for user menu options
                                        } while (isLogged);
                                        break;

                                    //==========================================================================================================//
                                    case UserTypes.JuniorAdmin:

                                        do
                                        {
                                            JuniorAdminMenuOptions juniorAdminMenuOption = menus.JuniorAdminMenu(usernameLogin);

                                            switch (juniorAdminMenuOption)
                                            {
                                            case JuniorAdminMenuOptions.CreateNewMessage:                 // OK

                                                Console.Clear();
                                                Console.WriteLine("======= Create new Message =======");
                                                Console.WriteLine();
                                                Console.WriteLine("Please type the username of the recipient of the message:\n");
                                                string recipient = inputManager.InputUserName();

                                                if (recipient is null)                 //if ESC is pressed
                                                {
                                                    break;
                                                }

                                                // check if recipient username exists in database
                                                bool recipientExists = dBManager.DoesUsernameExist(recipient);
                                                if (!recipientExists)
                                                {
                                                    Console.ForegroundColor = ConsoleColor.Magenta;
                                                    Console.WriteLine();
                                                    Console.WriteLine($"A user with username '{recipient}' does not exist.");
                                                    Console.ForegroundColor = ConsoleColor.Blue;
                                                    Console.WriteLine("\nPress any key to go back to the user menu");
                                                    Console.ResetColor();
                                                    Console.ReadKey();
                                                }
                                                else                 // the recipient exists. Go on to create and send message
                                                {
                                                    // check if recipient is active
                                                    bool recipientActive = dBManager.IsUserActive(recipient);
                                                    if (!recipientActive)
                                                    {
                                                        Console.ForegroundColor = ConsoleColor.Red;
                                                        Console.WriteLine("\nThe recipient you chose is no longer active.");
                                                        Console.WriteLine("Try sending a message to another user.");
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                    else
                                                    {
                                                        messageManager.CreateMessage(usernameLogin, recipient);
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;

                                            case JuniorAdminMenuOptions.Inbox:                 // OK

                                                messageManager.ShowInbox(usernameLogin);
                                                break;

                                            case JuniorAdminMenuOptions.SentMessages:                 // OK

                                                messageManager.ShowSentMessages(usernameLogin);
                                                break;

                                            case JuniorAdminMenuOptions.Info:                 // OK

                                                dBManager.GetUserInfo(usernameLogin);
                                                Console.ForegroundColor = ConsoleColor.Blue;
                                                Console.WriteLine("\nPress any key to go back");
                                                Console.ResetColor();
                                                Console.ReadKey();
                                                break;

                                            case JuniorAdminMenuOptions.ViewUserInfo:                  // OK

                                                dBManager.ViewUserInfo();
                                                break;

                                            case JuniorAdminMenuOptions.ViewUserMessages:                  // OK

                                                messageManager.ViewUserMessages();
                                                break;

                                            case JuniorAdminMenuOptions.ViewAllMessages:                  // OK

                                                messageManager.ViewAllMessages();
                                                break;

                                            case JuniorAdminMenuOptions.EditMessages:                 // Ok

                                                messageManager.EditMessage();
                                                break;

                                            case JuniorAdminMenuOptions.ExitToMain:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nGoodbye Junior...");
                                                System.Threading.Thread.Sleep(700);                 // wait for 0.7 seconds
                                                break;

                                            case JuniorAdminMenuOptions.Quit:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nClosing application...");
                                                Environment.Exit(0);
                                                break;
                                            }
                                        } while (isLogged);

                                        break;

                                    //==========================================================================================================//
                                    case UserTypes.MasterAdmin:

                                        do
                                        {
                                            MasterAdminMenuOptions masterAdminMenuOption = menus.MasterAdminMenu(usernameLogin);

                                            switch (masterAdminMenuOption)
                                            {
                                            case MasterAdminMenuOptions.CreateNewMessage:                 // OK

                                                Console.Clear();
                                                Console.WriteLine("======= Create new Message =======");
                                                Console.WriteLine();
                                                Console.WriteLine("Please type the username of the recipient of the message:\n");
                                                string recipient = inputManager.InputUserName();

                                                if (recipient is null)                 //if ESC is pressed
                                                {
                                                    break;
                                                }

                                                // check if recipient username exists in database
                                                bool recipientExists = dBManager.DoesUsernameExist(recipient);
                                                if (!recipientExists)
                                                {
                                                    Console.ForegroundColor = ConsoleColor.Magenta;
                                                    Console.WriteLine();
                                                    Console.WriteLine($"A user with username '{recipient}' does not exist.");
                                                    Console.ForegroundColor = ConsoleColor.Blue;
                                                    Console.WriteLine("\nPress any key to go back to the user menu");
                                                    Console.ResetColor();
                                                    Console.ReadKey();
                                                }
                                                else                 // the recipient exists. Go on to create and send message
                                                {
                                                    // check if recipient is active
                                                    bool recipientActive = dBManager.IsUserActive(recipient);
                                                    if (!recipientActive)
                                                    {
                                                        Console.ForegroundColor = ConsoleColor.Red;
                                                        Console.WriteLine("\nThe recipient you chose is no longer active.");
                                                        Console.WriteLine("Try sending a message to another user.");
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                    else
                                                    {
                                                        messageManager.CreateMessage(usernameLogin, recipient);
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;

                                            case MasterAdminMenuOptions.Inbox:                 // OK

                                                messageManager.ShowInbox(usernameLogin);
                                                break;

                                            case MasterAdminMenuOptions.SentMessages:                 // OK

                                                messageManager.ShowSentMessages(usernameLogin);
                                                break;

                                            case MasterAdminMenuOptions.Info:                 // OK

                                                dBManager.GetUserInfo(usernameLogin);
                                                Console.ForegroundColor = ConsoleColor.Blue;
                                                Console.WriteLine("\nPress any key to go back");
                                                Console.ResetColor();
                                                Console.ReadKey();
                                                break;

                                            case MasterAdminMenuOptions.ViewUserInfo:                  // OK

                                                dBManager.ViewUserInfo();
                                                break;

                                            case MasterAdminMenuOptions.ViewUserMessages:                  // OK

                                                messageManager.ViewUserMessages();
                                                break;

                                            case MasterAdminMenuOptions.ViewAllMessages:                  // OK

                                                messageManager.ViewAllMessages();
                                                break;

                                            case MasterAdminMenuOptions.EditMessages:                 // OK

                                                messageManager.EditMessage();
                                                break;

                                            case MasterAdminMenuOptions.DeleteMessages:                 // Ok

                                                messageManager.DeleteMessage();
                                                break;

                                            case MasterAdminMenuOptions.ExitToMain:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nGoodbye Admin...");
                                                System.Threading.Thread.Sleep(700);                 // wait for 0.7 seconds
                                                break;

                                            case MasterAdminMenuOptions.Quit:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nClosing application...");
                                                Environment.Exit(0);
                                                break;
                                            }
                                        } while (isLogged);

                                        break;

                                    case UserTypes.SuperAdmin:

                                        do
                                        {
                                            SuperAdminMenuOptions superAdminMenuOption = menus.SuperAdminMenu(usernameLogin);

                                            switch (superAdminMenuOption)
                                            {
                                            case SuperAdminMenuOptions.CreateNewMessage:                 // OK

                                                Console.Clear();
                                                Console.WriteLine("======= Create new Message =======");
                                                Console.WriteLine();
                                                Console.WriteLine("Please type the username of the recipient of the message:\n");
                                                string recipient = inputManager.InputUserName();

                                                if (recipient is null)                 //if ESC is pressed
                                                {
                                                    break;
                                                }

                                                // check if recipient username exists in database
                                                bool recipientExists = dBManager.DoesUsernameExist(recipient);
                                                if (!recipientExists)
                                                {
                                                    Console.ForegroundColor = ConsoleColor.Magenta;
                                                    Console.WriteLine();
                                                    Console.WriteLine($"A user with username '{recipient}' does not exist.");
                                                    Console.ForegroundColor = ConsoleColor.Blue;
                                                    Console.WriteLine("\nPress any key to go back to the user menu");
                                                    Console.ResetColor();
                                                    Console.ReadKey();
                                                }
                                                else                 // the recipient exists. Go on to create and send message
                                                {
                                                    // check if recipient is active
                                                    bool recipientActive = dBManager.IsUserActive(recipient);
                                                    if (!recipientActive)
                                                    {
                                                        Console.ForegroundColor = ConsoleColor.Red;
                                                        Console.WriteLine("\nThe recipient you chose is no longer active.");
                                                        Console.WriteLine("Try sending a message to another user.");
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                    else
                                                    {
                                                        messageManager.CreateMessage(usernameLogin, recipient);
                                                        Console.ForegroundColor = ConsoleColor.Blue;
                                                        Console.WriteLine("\nPress any key to go back to the user menu");
                                                        Console.ResetColor();
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;

                                            case SuperAdminMenuOptions.Inbox:                 // OK

                                                messageManager.ShowInbox(usernameLogin);
                                                break;

                                            case SuperAdminMenuOptions.SentMessages:                 // OK

                                                messageManager.ShowSentMessages(usernameLogin);
                                                break;

                                            case SuperAdminMenuOptions.Info:                 // OK

                                                dBManager.GetUserInfo(usernameLogin);
                                                Console.ForegroundColor = ConsoleColor.Blue;
                                                Console.WriteLine("\nPress any key to go back");
                                                Console.ResetColor();
                                                Console.ReadKey();
                                                break;

                                            //==========================================================================================================================================//
                                            case SuperAdminMenuOptions.CreateNewUser:                 // OK

                                                dBManager.CreateNewUser();
                                                break;

                                            case SuperAdminMenuOptions.DeleteUser:                 // OK

                                                dBManager.DeleteUser();
                                                break;

                                            case SuperAdminMenuOptions.ActivateUser:                  // OK

                                                dBManager.ActivateUser();
                                                break;

                                            case SuperAdminMenuOptions.EditUserType:                 // OK

                                                dBManager.EditUserType();
                                                break;

                                            case SuperAdminMenuOptions.ViewUserInfo:                  // OK

                                                dBManager.ViewUserInfo();
                                                break;

                                            case SuperAdminMenuOptions.ViewUserMessages:                  // OK

                                                messageManager.ViewUserMessages();
                                                break;

                                            case SuperAdminMenuOptions.ViewAllMessages:                  // OK

                                                messageManager.ViewAllMessages();
                                                break;

                                            case SuperAdminMenuOptions.DeleteMessages:                 // OK

                                                messageManager.DeleteMessage();
                                                break;

                                            case SuperAdminMenuOptions.EditMessages:                 // Ok

                                                messageManager.EditMessage();
                                                break;

                                            case SuperAdminMenuOptions.ExitToMain:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nGoodbye Master...");
                                                System.Threading.Thread.Sleep(700);                 // wait for 0.7 seconds
                                                break;

                                            case SuperAdminMenuOptions.Quit:                 // OK
                                                Console.Clear();
                                                isLogged = false;
                                                Console.WriteLine("\nClosing application...");
                                                Environment.Exit(0);
                                                break;
                                            }
                                        } while (isLogged);

                                        break;
                                        //==========================================================================================================//
                                    }
                                    //} while (isLogged);
                                    break;
                                }
                            }
                        }
                    }
                    else     // Break to main menu if username is null after ESC is pressed
                    {
                        break;
                    }
                    break;

                case MainMenuOptions.SignUp:     // OK
                    bool   itExists = false;
                    string usernameSignup;
                    do
                    {
                        menus.SignUpMenu();                            // includes console clear and welcome message
                        usernameSignup = inputManager.InputUserName(); // returns null if ESC is pressed
                        if (usernameSignup is null)
                        {
                            break;
                        }
                        itExists = dBManager.DoesUsernameExist(usernameSignup);     // Check if username already exists in database
                        if (itExists)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("The username you entered already exists. Please choose another.");
                            Console.ResetColor();
                            Console.ReadKey();
                        }
                    } while (itExists);
                    if (usernameSignup != null)     // username is null if ESC is pressed
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("The username you entered is not taken. Nice choice!");
                        Console.ResetColor();

                        Console.WriteLine();
                        string password = inputManager.InputPassword();
                        dBManager.AddUser(usernameSignup, password);     // add new user to database
                        Console.WriteLine("\nPress any key to go back to Main Menu.");
                        Console.ReadKey();
                    }
                    break;

                case MainMenuOptions.Info:     // OK
                    dBManager.GetInfo();
                    break;

                case MainMenuOptions.Exit:     // OK
                    Console.Clear();
                    Console.WriteLine("\nClosing application...");
                    Environment.Exit(0);
                    break;
                }
            } while (true);
        }