import os
import sys

CAN_USE_PYREPL = sys.platform != "win32"


def interactive_console(mainmodule=None, quiet=False, pythonstartup=False):
    global CAN_USE_PYREPL
    if not CAN_USE_PYREPL:
        return sys._baserepl()

    startup_path = os.getenv("PYTHONSTARTUP")
    if pythonstartup and startup_path:
        import tokenize
        with tokenize.open(startup_path) as f:
            startup_code = compile(f.read(), startup_path, "exec")
            exec(startup_code)

    # set sys.{ps1,ps2} just before invoking the interactive interpreter. This
    # mimics what CPython does in pythonrun.c
    if not hasattr(sys, "ps1"):
        sys.ps1 = ">>> "
    if not hasattr(sys, "ps2"):
        sys.ps2 = "... "

    run_interactive = None
    try:
        import errno
        if not os.isatty(sys.stdin.fileno()):
            raise OSError(errno.ENOTTY, "tty required", "stdin")
        from .simple_interact import check
        if err := check():
            raise RuntimeError(err)
        from .simple_interact import run_multiline_interactive_console
        run_interactive = run_multiline_interactive_console
    except Exception as e:
        from .trace import trace
        msg = f"warning: can't use pyrepl: {e}"
        trace(msg)
        print(msg, file=sys.stderr)
        CAN_USE_PYREPL = False
    if run_interactive is None:
        return sys._baserepl()
    return run_interactive(mainmodule)

if __name__ == "__main__":
    interactive_console()
