Design Elevator system

from IPython.display import display, Image
import plantuml

PlantUML

def generate_uml_diagram():
    uml_text = """
    @startuml
    class Elevator {
        +capacity: Int
        +inside_panel
        +current_floor
        current_state: Enum(going_up, going_down, idle)
        go_to_floor()
        open_door()
        close_door()
    }

    class Button {
        
    }

    class Floor {
        number
        outside_panel
        up_pressed()
        down_pressed()
    }

    class OutsidePanel {
        buttons: dict()
        up_pressed()
        down_pressed()
    }
    
    class InsidePanel {
        buttons: dict()
        floor_pressed()
        open_door_pressed()
        close_door_pressed()
        emergency_pressed()
    }
    
    class Orchestrator {
        elevators: list(Elevator)
        floors: list(floors)
        passengers: list(int)
        + outside_panel_button_pressed(floor, direction)
        + inside_panel_button_pressed(elevator_id, button)
        dispatch_elevator: (direction, floor) : elevator 
        }

    class User {
        press_up()
        press_down()
        }

        
    Elevator "1" *-- "1" InsidePanel
    Elevator "1" *-- "1" OutsidePanel
    
    
    
    
    @enduml
    """
    # note right of Orchestrator : this is where all the logic happens, this is complex optimization problem
    # @enduml
    # """
    plantuml_obj = plantuml.PlantUML(url='http://www.plantuml.com/plantuml/img/')
    result = plantuml_obj.processes(uml_text)
    return result

# Call the function and save or display the diagram
diagram_image = generate_uml_diagram()

display(Image(data=diagram_image))