"""CLI entry point for codecbench."""

from __future__ import annotations

import argparse
import sys


def main() -> None:
    parser = argparse.ArgumentParser(
        prog="codecbench",
        description="Neural audio codec benchmark + validation pipeline",
    )
    sub = parser.add_subparsers(dest="command")

    # bench subcommand
    bench_p = sub.add_parser("bench", help="Run throughput benchmarks")
    bench_p.add_argument("--codecs", nargs="+", default=["xcodec2", "snac", "wavtokenizer", "bicodec"])
    bench_p.add_argument("--bs", nargs="+", type=int, default=[1, 8, 32])
    bench_p.add_argument("--seconds", type=float, default=6.0)
    bench_p.add_argument("--dtype", nargs="+", default=["fp32", "bf16"])
    bench_p.add_argument("--warmup", type=int, default=10)
    bench_p.add_argument("--iters", type=int, default=50)
    bench_p.add_argument("--output-dir", default="results")
    bench_p.add_argument("--device", default="cuda")

    # eval subcommand
    eval_p = sub.add_parser("eval", help="Run reconstruction quality evaluation")
    eval_p.add_argument("--codecs", nargs="+", default=["xcodec2", "snac", "wavtokenizer", "bicodec"])
    eval_p.add_argument("--audio-dir", required=True, help="Directory of audio files to evaluate")
    eval_p.add_argument("--seconds", type=float, default=6.0)
    eval_p.add_argument("--output-dir", default="results")
    eval_p.add_argument("--device", default="cuda")

    # smoke subcommand
    smoke_p = sub.add_parser("smoke", help="Quick sanity test of available codecs")
    smoke_p.add_argument("--codecs", nargs="+", default=["xcodec2", "snac", "wavtokenizer", "bicodec"])
    smoke_p.add_argument("--device", default="cuda")

    args = parser.parse_args()

    if args.command is None:
        parser.print_help()
        sys.exit(1)

    if args.command == "bench":
        from scripts.run_bench import run_bench
        run_bench(args)
    elif args.command == "eval":
        from scripts.run_eval import run_eval
        run_eval(args)
    elif args.command == "smoke":
        from scripts.smoke_test import run_smoke
        run_smoke(args)


if __name__ == "__main__":
    main()
