import java.util.ArrayList;
import java.util.Scanner;

public class EncapsulationDemo {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        ArrayList<Student> studentList = new ArrayList<>();

        int choice;

        do {
            System.out.println("\n===== MENU =====");
            System.out.println("1. Add Student");
            System.out.println("2. Update Student");
            System.out.println("3. Delete Student");
            System.out.println("4. Show All Students");
            System.out.println("5. Exit");
            System.out.print("Enter your choice: ");

            choice = sc.nextInt();
            sc.nextLine(); // clear buffer

            switch (choice) {

                case 1:
                    System.out.print("Enter Name: ");
                    String name = sc.nextLine();

                    System.out.print("Enter Age: ");
                    int age = sc.nextInt();

                    System.out.print("Enter CGPA: ");
                    double cgpa = sc.nextDouble();

                    Student s = new Student(name, age, cgpa);
                    studentList.add(s);

                    System.out.println("Student Added Successfully!");
                    break;

                case 2:
                    System.out.print("Enter index to update: ");
                    int updateIndex = sc.nextInt();
                    sc.nextLine();

                    if (updateIndex >= 0 && updateIndex < studentList.size()) {

                        System.out.print("Enter New Name: ");
                        String newName = sc.nextLine();

                        System.out.print("Enter New Age: ");
                        int newAge = sc.nextInt();

                        System.out.print("Enter New CGPA: ");
                        double newCgpa = sc.nextDouble();

                        studentList.get(updateIndex).setName(newName);
                        studentList.get(updateIndex).setAge(newAge);
                        studentList.get(updateIndex).setCgpa(newCgpa);

                        System.out.println("Student Updated Successfully!");
                    } else {
                        System.out.println("Invalid Index!");
                    }
                    break;

                case 3:
                    System.out.print("Enter index to delete: ");
                    int deleteIndex = sc.nextInt();

                    if (deleteIndex >= 0 && deleteIndex < studentList.size()) {
                        studentList.remove(deleteIndex);
                        System.out.println("Student Deleted Successfully!");
                    } else {
                        System.out.println("Invalid Index!");
                    }
                    break;

                case 4:
                    if (studentList.isEmpty()) {
                        System.out.println("No Students Found!");
                    } else {
                        for (int i = 0; i < studentList.size(); i++) {
                            System.out.print("Index " + i + " -> ");
                            studentList.get(i).display();
                        }
                    }
                    break;

                case 5:
                    System.out.println("Exiting Program...");
                    break;

                default:
                    System.out.println("Invalid Choice!");
            }

        } while (choice != 5);

        sc.close();
    }
}