from lpython import i32
class Person:
    def __init__(self:"Person", first:str, last:str, birthyear:i32, sgender:str):
        self.first:str = first
        self.last:str = last
        self.birthyear:i32 = birthyear
        self.sgender:str = sgender
    
    def describe(self:"Person"):
        print("first: " + self.first)
        print("last: " + self.last)
        print("birthyear: " + str(self.birthyear))
        print("sgender: " + self.sgender)

class Employee:
    def __init__(self:"Employee", person:Person, hire_date:i32, department:str):
        self.person:Person = person
        self.hire_date:i32 = hire_date
        self.department:str = department
    
    def describe(self:"Employee"):
        self.person.describe()
        print("hire_date: " + str(self.hire_date))
        print("department: " + self.department)

def main():
    jack:Person = Person("Jack", "Smith", 1984, "M")
    jill_p:Person = Person("Jill", "Smith", 1984, "F")
    jill:Employee = Employee(jill_p, 2003, "sales")

    jack.describe()
    assert jack.first == "Jack"
    assert jack.last == "Smith"
    assert jack.birthyear == 1984
    assert jack.sgender == "M"

    jill.describe()
    assert jill.person.first == "Jill"
    assert jill.person.last == "Smith"
    assert jill.person.birthyear == 1984
    assert jill.person.sgender == "F"
    assert jill.department == "sales"
    assert jill.hire_date == 2003

if __name__ == '__main__':
    main()