import argparse
import os

from bemani.format import ARC


def main() -> None:
    parser = argparse.ArgumentParser(description="A utility to extract ARC files.")
    parser.add_argument(
        "file",
        help="ARC file to extract.",
        type=str,
    )
    parser.add_argument(
        "-d",
        "--directory",
        help="Directory to extract to. Defaults to current directory.",
        default="."
    )
    parser.add_argument(
        "-l",
        "--list-only",
        action="store_true",
        help="Print files but do not extract them.",
    )
    args = parser.parse_args()

    root = args.directory
    if root[-1] != '/':
        root = root + '/'
    root = os.path.realpath(root)

    rfp = open(args.file, 'rb')
    data = rfp.read()
    rfp.close()

    arc = ARC(data)
    for fn in arc.filenames:
        if args.list_only:
            print(fn)
        else:
            print(f'Extracting {fn} to disk...')
            realfn = os.path.join(root, fn)
            dirof = os.path.dirname(realfn)
            os.makedirs(dirof, exist_ok=True)
            with open(realfn, 'wb') as wfp:
                wfp.write(arc.read_file(fn))


if __name__ == '__main__':
    main()
