#!/usr/bin/env python3
import argparse
import subprocess
import sys

import format_trace


def get_trace(command):
    result = subprocess.run(
        ["lldb", "-b", "-o", "run", command],
        env={"IVY_RT_TRACE": "1"},
        capture_output=True,
        encoding="utf8",
    )
    lines = result.stdout.split("\n")
    return lines[3:-4]


def trace(command, only_debug):
    syms = format_trace.get_syms(command)
    lines = get_trace(command)
    format_trace.handle_trace(lines, syms, only_debug)


def main():
    parser = argparse.ArgumentParser(
        description="Run an Ivy executable and format its runtime trace.",
    )
    parser.add_argument(
        "command",
        help="The command to execute.",
    )
    parser.add_argument(
        "-d",
        "--only-debug",
        action="store_true",
        help="If set, only print the DEBUG outputs",
    )
    if len(sys.argv) <= 1:
        parser.print_help()
        sys.exit(0)
    args = parser.parse_args()
    trace(args.command, args.only_debug)


if __name__ == "__main__":
    main()
