from pathlib import Path
import re
import shlex
import subprocess
import threading
import queue
import sys


to_p = Path("svg2png")
to_p.mkdir(exist_ok=True)
for f in to_p.glob("*.png"):
    f.unlink()

images = [
    f
    for f in Path("_build/html/_images/").glob("*.svg")
    if not re.match(r"^seg[0-9A-F]{2}$", f.stem)
]
q = queue.Queue()


def worker():
    while True:
        item = q.get()
        if item is None:
            break

        to = to_p / item.with_suffix(".png").name
        args = [
            "inkscape",
            "-z",
            "-e",
            str(to.absolute()),
            "-w",
            "800",
            "-background",
            "white",
            str(item.absolute()),
        ]
        print("Running:  {}".format(" ".join(shlex.quote(x) for x in args)))
        proc = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        if b"Bitmap saved as" not in proc.stdout:
            print("Error!")
            print(proc.stdout)
            sys.exit(1)

        q.task_done()


NUM_THREADS = 8
threads = []
for i in range(NUM_THREADS):
    t = threading.Thread(target=worker)
    t.start()
    threads.append(t)

for img in sorted(images):
    q.put(img)

q.join()

for i in range(NUM_THREADS):
    q.put(None)
for t in threads:
    t.join()