// Class definition for a Person
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // Method to return a greeting message
  greet() {
    return `Hello, my name is ${this.name} and I'm ${this.age} years old.`;
  }

  // Method to celebrate birthday
  celebrateBirthday() {
    this.age += 1;
    return `Happy Birthday, ${this.name}! You are now ${this.age} years old.`;
  }
}

// Class definition for a Student, extending from Person
class Student extends Person {
  constructor(name, age, grade) {
    super(name, age);
    this.grade = grade;
  }

  // Method to describe the student
  describe() {
    return `${this.name} is a ${this.grade} grade student and is ${this.age} years old.`;
  }
}

// Function to enroll a new student
function enrollStudent(name, age, grade) {
  const student = new Student(name, age, grade);
  console.log(student.greet());
  console.log(student.describe());
  return student;
}

// Function to promote a student to the next grade
function promoteStudent(student) {
  student.grade += 1;
  console.log(`${student.name} has been promoted to grade ${student.grade}.`);
  return student;
}

// Variable definition and assignment
let schoolName = "Greenwood High School";
let students = [];

// Enrolling students
students.push(enrollStudent("Alice", 14, 9));
students.push(enrollStudent("Bob", 15, 10));

// Looping through students to celebrate their birthdays
students.forEach(student => {
  console.log(student.celebrateBirthday());
});

// Promoting all students
students = students.map(promoteStudent);

// Displaying the final state of all students
console.log("Final Students List:");
students.forEach(student => console.log(student.describe()));

// Updating the school name
schoolName = "Greenwood International School";
console.log(`School Name Updated to: ${schoolName}`);
