public static void UpdateAccountHolderMenu(int id, string updateOption)
 {
     try
     {
         if (updateOption.Equals("1"))
         {
             Console.Write("Enter New First Name: ");
             string changeFirstName = Console.ReadLine();
             AccountHolderRepository.UpdateAccountHolder(id, firstName: changeFirstName);
         }
         else if (updateOption.Equals("2"))
         {
             Console.Write("Enter New Last Name: ");
             string changeLastName = Console.ReadLine();
             AccountHolderRepository.UpdateAccountHolder(id, lastName: changeLastName);
         }
         else if (updateOption.Equals("3"))
         {
             Console.Write("Enter New Middle Name: ");
             string changeMiddleName = Console.ReadLine();
             AccountHolderRepository.UpdateAccountHolder(id, middleName: changeMiddleName);
         }
         else if (updateOption.Equals("4"))
         {
             Console.Write("Enter New Phone Number: ");
             string changePhoneNumber = Console.ReadLine();
             AccountHolderRepository.UpdateAccountHolder(id, phoneNumber: changePhoneNumber);
         }
         else if (updateOption.Equals("5"))
         {
             Console.Write("Enter Your New Address: ");
             string changeAddress = Console.ReadLine();
             AccountHolderRepository.UpdateAccountHolder(id, address: changeAddress);
         }
         else
         {
             throw new Exception("Input  Not Recognized");
         }
     }
     catch (Exception e)
     {
         Console.ForegroundColor = ConsoleColor.Red;
         Console.WriteLine($"Error: {e.Message}");
     }
     finally
     {
         ShowContinueMenu();
     }
 }
        public static bool LoginAccountHolder()
        {
            if (isHolderLoggedIn == true)
            {
                return(isHolderLoggedIn);
            }
            else
            {
                Console.Clear();
                Console.WriteLine("    ACCOUNT HOLDER LOGIN");
                Console.Write("Enter your email: ");
                string email = Console.ReadLine();

                int userId = AccountHolderRepository.LoginAccountHolder(email);
                isHolderLoggedIn = (userId != 0);

                return(isHolderLoggedIn);
            }
        }
        static void Main(string[] args)
        {
            AccountHolderRepository accountHolder = new AccountHolderRepository();



            //ManagerRepository manager = new ManagerRepository();
            try
            {
                //Console.WriteLine("enter your preffered id");
                Console.WriteLine("Enter your ID");
                int id = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Enter your First Name");
                string firstName = Console.ReadLine();

                Console.WriteLine("Enter your Last Name");
                string lastName = Console.ReadLine();

                Console.WriteLine("Enter your Middle Name");
                string middleName = Console.ReadLine();

                Console.WriteLine("Enter your Date of Birth");
                DateTime dateOfBirth = Convert.ToDateTime(Console.ReadLine());

                Console.WriteLine("Enter your Email");
                string email = Console.ReadLine();

                Console.WriteLine("Enter your PhoneNumber");
                string phoneNumber = Console.ReadLine();

                Console.WriteLine("Enter your Address");
                string address = Console.ReadLine();

                Console.WriteLine("Enter your Password");
                string password = Console.ReadLine();

                Console.WriteLine("Confirm Your Password");
                string checkPassword = Console.ReadLine();



                //accountHolder.CreateAccountHolder(001, "olaoluwa", "ajefera", "lionel", new DateTime(2020 - 09 - 12), "*****@*****.**", "090876543321", "lekki phase1", "read","read");
                //accountHolder.CreateAccountHolder(002, "adejimi", "olamide", "cristiano", new DateTime(2020 - 09 - 12), "*****@*****.**", "08076543212", "magodo phase1", "pass", "pass");
                accountHolder.CreateAccountHolder(id, firstName, lastName, middleName, dateOfBirth, email, phoneNumber, address, password, checkPassword);
                //Console.WriteLine("Congratulations.. Registration Succesful");
                accountHolder.List();

                ////accountHolder.UpdateAccountHolder(001, "adeyi", "ojo", "*****@*****.**", "Gbonogun Abeokuta", "09028041932");
                ////accountHolder.RemoveAccountHolder(002);



                //manager.CreateManager(001, "Ade", "Kola", "Oluseyi", "*****@*****.**", "dearie223");
                //manager.List();



                Console.ReadKey();
            }
            catch (Exception)
            {
                Console.WriteLine("Registration Failed Due to Wrong Input");
            }
        }
 public static void LogOutAccountHolder()
 {
     isHolderLoggedIn = false;
     AccountHolderRepository.LogOutAccountHolder();
 }
        public static void HandleLoggedInAccountHolderMenu(string option)
        {
            LoanManagement      loanManagement      = new LoanManagement();
            OverdraftManagement overdraftManagement = new OverdraftManagement();

            switch (option)
            {
            case "0":
                HandleSubMenu("1");
                break;

            case "1":
                AccountHolderRepository.SaveMoney();
                HandleAccountHolderMenu("2");
                break;

            case "2":
                Menu.ResetMenuSettings();
                Console.WriteLine("     TRANSFER MENU");
                Console.Write("Enter account number: ");
                string accountNumber = Console.ReadLine();
                Console.Write("How much do you want to transfer: ");
                double amountToTransfer = Convert.ToDouble(Console.ReadLine());
                AccountHolderRepository.Transfer(accountNumber, amountToTransfer);
                HandleAccountHolderMenu("2");
                break;

            case "3":
                AccountHolderRepository.WithdrawMoney();
                HandleAccountHolderMenu("2");
                break;

            case "4":
                AccountHolderRepository.CheckBalance();
                HandleAccountHolderMenu("2");
                break;

            case "5":
                ShowLoanServiceMenu();
                string loanOption = Console.ReadLine();
                if (loanOption.Equals("0"))
                {
                    HandleAccountHolderMenu("2");
                }
                else if (loanOption.Equals("1"))
                {
                    ShowLoanMenu();
                    string minOption = Console.ReadLine();
                    if (minOption.Equals("0"))
                    {
                        HandleAccountHolderMenu("2");
                    }
                    else
                    {
                        HandleLoanMenu(minOption);
                    }
                }
                else if (loanOption.Equals("2"))
                {
                    if (loanManagement.checkLoanBalance(AccountHolderRepository.LoggedInAccount.Id, false))
                    {
                        Menu.ResetMenuSettings();
                        Console.WriteLine("     LOAN PAYBACK MENU");
                        Console.Write("How much do you want to pay: ");
                        double amountToPay = Convert.ToDouble(Console.ReadLine());
                        loanManagement.payBackLoan(AccountHolderRepository.LoggedInAccount.Id, amountToPay);
                    }
                    Menu.ShowContinueMenu();
                    HandleAccountHolderMenu("2");
                }
                else if (loanOption.Equals("3"))
                {
                    loanManagement.checkLoanBalance(AccountHolderRepository.LoggedInAccount.Id);
                    Menu.ShowContinueMenu();
                    HandleAccountHolderMenu("2");
                }

                break;

            case "6":
                ResetMenuSettings();
                Console.WriteLine("     OVERDRAFT MENU");
                Console.Write("How much overdraft?: ");
                double overdraftAmount = Convert.ToDouble(Console.ReadLine());
                if (overdraftAmount > 100000)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Overdraft limit exceeded. Maximum overdraft is 100,000");
                }
                else if (overdraftAmount <= AccountHolderRepository.LoggedInAccount.AccountBalance)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Overdraft less than or equal to account balance. Please proceed to withdrawal");
                }
                else
                {
                    if (!overdraftManagement.checkOverdraftBalance(AccountHolderRepository.LoggedInAccount.Id))
                    {
                        overdraftManagement.GetOverdraft(AccountHolderRepository.LoggedInAccount, overdraftAmount);
                    }
                }
                ShowContinueMenu();
                HandleAccountHolderMenu("2");

                break;

            case "7":
                ShowAccountHolderUpdateMenu();
                string updateOption = Console.ReadLine();
                UpdateAccountHolderMenu(AccountHolderRepository.LoggedInAccount.Id, updateOption);
                HandleAccountHolderMenu("2");
                break;

            case "8":
                AccountHolderRepository.ChangePassword();
                HandleAccountHolderMenu("2");
                break;

            case "9":
                AccountHolderRepository.SetPin();
                HandleAccountHolderMenu("2");
                break;

            default:
                break;
            }
        }
        public static void HandleLoggedInManagerOperations(string option)
        {
            //AccountHolderRepository accountHolderRepository = new AccountHolderRepository();
            if (option.Equals("0"))
            {
                Auth.LogoutAccountManager();
                HandleSubMenu("2");
            }
            else if (option.Equals("1"))
            {
                Console.Clear();
                Console.WriteLine("     LIST OF ACCOUNT HOLDERS");
                AccountHolderRepository.ListAccountHolders();
                ShowContinueMenu();
                HandleAccountManagerMenu("2");
            }
            else if (option.Equals("2"))
            {
                Console.Clear();
                Console.WriteLine("   ACCOUNT HOLDER DELETE MENU");
                Console.Write("Enter Account Id: ");
                int id = Convert.ToInt32(Console.ReadLine());

                AccountHolderRepository.RemoveAccountHolder(id: id);
                ShowContinueMenu();
                HandleAccountManagerMenu("2");
            }
            else if (option.Equals("3"))
            {
                Console.Clear();
                Console.WriteLine("   ACCOUNT HOLDER UPDATE MENU");
                Console.Write("Enter Account Id: ");
                int id = Convert.ToInt32(Console.ReadLine());

                AccountHolder account = AccountHolderRepository.FindById(id);
                if (account == null)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Account doesn't exist");
                    Menu.ShowContinueMenu();
                }
                else
                {
                    Menu.ShowAccountManagerUpdateMenu();

                    string updateOption = Console.ReadLine();

                    if (updateOption.Equals("6"))
                    {
                        Console.Write("Enter New Account Status(active/inactive): ");
                        string changeAccountStatus = Console.ReadLine().ToLower();
                        if (changeAccountStatus.Equals("active") || changeAccountStatus.Equals("inactive"))
                        {
                            AccountHolderRepository.UpdateAccountHolder(id, status: changeAccountStatus);
                        }
                        else
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("Invalid input");
                        }
                        ShowContinueMenu();
                        HandleAccountManagerMenu("2");
                    }
                    else
                    {
                        UpdateAccountHolderMenu(id, updateOption);
                    }
                }
            }
        }