# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
import builtins

try:
    import json

    try:
        from notebook.notebookapp import list_running_servers

        server_list = list_running_servers()
    except:
        from jupyter_server import serverapp

        server_list = serverapp.list_running_servers()

    server_info_list = []

    for si in server_list:
        server_info_object = {}
        server_info_object["base_url"] = si["base_url"]
        server_info_object["notebook_dir"] = si.get(
            "notebook_dir", si.get("root_dir", "")
        )
        server_info_object["hostname"] = si["hostname"]
        server_info_object["password"] = si["password"]
        server_info_object["pid"] = si["pid"]
        server_info_object["port"] = si["port"]
        server_info_object["secure"] = si["secure"]
        server_info_object["token"] = si["token"]
        server_info_object["url"] = si["url"]
        server_info_list.append(server_info_object)

    builtins.print(json.dumps(server_info_list))
except Exception:
    """Usage of subprocess is safe here as we are using run and are in control of all the arguments passed to it
    flagging for execution of partial path is also not correct as it is a command, not a path
    """
    import subprocess  # nosec
    from subprocess import PIPE  # nosec
    import sys

    result = subprocess.run(  # nosec
        ["jupyter", "notebook", "list", "--jsonlist"], stdout=PIPE, stderr=PIPE
    )
    encoding = os.getenv("PYTHONIOENCODING", "utf-8")
    builtins.print.write(result.stdout.decode(encoding))
