// imports allow you to use code already written by others.  It is good to explore and learn libraries.  The names around the dots often give you a hint to the originator of the code.
import java.util.Scanner; //library for user input
import java.lang.Math; //library for random numbers


public class Menu {
    // Instance Variables
    public final String DEFAULT = "\u001B[0m";  // Default Terminal Color
    public final String[][] COLORS = { // 2D Array of ANSI Terminal Colors
        {"Default",DEFAULT},
        {"Red", "\u001B[31m"}, 
        {"Green", "\u001B[32m"}, 
        {"Yellow", "\u001B[33m"}, 
        {"Blue", "\u001B[34m"}, 
        {"Purple", "\u001B[35m"}, 
        {"Cyan", "\u001B[36m"}, 
        {"White", "\u001B[37m"}, 
    };
    // 2D column location for data
    public final int NAME = 0;
    public final int ANSI = 1;  // ANSI is the "standard" for terminal codes

    // Constructor on this Object takes control of menu events and actions
    public Menu() {
        Scanner sc = new Scanner(System.in);  // using Java Scanner Object
        
        this.print();  // print Menu
        boolean quit = false;
        while (!quit) {
            try {  // scan for Input
                int choice = sc.nextInt();  // using method from Java Scanner Object
                System.out.print("" + choice + ": ");
                quit = this.action(choice);  // take action
            } catch (Exception e) {
                sc.nextLine(); // error: clear buffer
                System.out.println(e + ": Not a number, try again.");
            }
        }
        sc.close();
    }

    // Print the menu options to Terminal
    private void print() {
        //System.out.println commands below is used to present a Menu to the user. 
        System.out.println("-------------------------\n");
        System.out.println("Choose from these choices");
        System.out.println("-------------------------\n");
        System.out.println("1 - Introduction");
        System.out.println("2 - Celsius to Fahrenheit");
        System.out.println("3 - Fibonacci Sequence");
        System.out.println("4 - Even-Odd Calculator");
        System.out.println("0 - Quit");
        System.out.println("-------------------------\n");
    }

    // Private method to perform action and return true if action is to quit/exit
    private boolean action(int selection) {
        boolean quit = false;

        switch (selection) {  // Switch or Switch/Case is Control Flow statement and is used to evaluate the user selection
            case 0:  
                System.out.print("Exiting...");
                quit = true;
                break;
            case 1:
                System.out.print("Hey, it's Braeden!");
                break;
            case 2:
                Scanner input;
                double Faren = 0.0;
                double Cels = 0.0;
                String FinalOutput;
                boolean correctDouble;

                input = new Scanner(System.in);
                System.out.print("Enter a temperature in Celsius: ");
                try {
                    Cels = input.nextDouble();
                    System.out.println(Cels);
                    correctDouble = true;
                } catch (Exception e) {
                    correctDouble = false;
                }
                input.close();

                Faren = ((Cels * 9) / 5) + 32; 

                FinalOutput =   Cels + " degrees celsius is equal to " + Faren + " degrees farenheit";

                System.out.println( Cels + " degrees celsius is equal to " + Faren + " degrees farenheit");
             //   for(int i = 0; i < COLORS.length; i++)  // loop through COLORS array
             //       System.out.print(COLORS[i][ANSI] + COLORS[i][NAME]);
                break;
            case 3:
                Scanner inputTwo;

                inputTwo = new Scanner(System.in);
                System.out.print("Type in amount of numbers for sequence  -->  ");
                try {
                    int N = inputTwo.nextInt();
                    int x1 = 0, x2 = 1;
        
                    int count = 0;
        
                    while (count < N) {
        
                        System.out.print(x1 + " ");
        
                        int x3 = x2 + x1;
                        x1 = x2;
                        x2 = x3;
                        count = count + 1;
                    }
        
        
                } catch (Exception e) {  
                    System.out.println("Input must be an integer  " + e);
                }
                break;

            case 4:
                Scanner inputThree = new Scanner(System.in);
                int num;  //Declare a variable
                System.out.println("Enter a number:");
                num = inputThree.nextInt();
        
                //If number is divisible by 2 then it's an even number
                //else odd number
                if ( num % 2 == 0 )
                    System.out.println( num + " is even!");
                else
                    System.out.println( num + " is odd!");
        
                // System.out.print("Loading...");
                // for (int i = 0; i < 20; i++) {  // fixed length loading bar
                //     int random = (int) (Math.random() * COLORS.length);  // random logic
                //     try {
                //         Thread.sleep(100);  // delay for loading
                //     } catch (Exception e) {
                //         System.out.println(e);
                //     }
                //     System.out.print(COLORS[random][ANSI] + "#");
                // }
                break;
                    
            default:
                //Prints error message from console
                System.out.print("Unexpected choice, try again.");
        }
        System.out.println(DEFAULT);  // make sure to reset color and provide new line
        return quit;
    }

    // Static driver/tester method
    static public void main(String[] args)  {  
        new Menu(); // starting Menu object
    }

}
Menu.main(null);
-------------------------

Choose from these choices
-------------------------

1 - Introduction
2 - Celsius to Fahrenheit
3 - Fibonacci Sequence
4 - Even-Odd Calculator
0 - Quit
-------------------------

1: Hey, it's Braeden!
2: Enter a temperature in Celsius: 27.0
27.0 degrees celsius is equal to 80.6 degrees farenheit

3: Type in amount of numbers for sequence  -->  0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 
4: Enter a number:
12398 is even!

0: Exiting...