import subprocess
import shutil
import os
import argparse
from pathlib import Path
from multiprocessing import Process

parser = argparse.ArgumentParser()
parser.add_argument("-o", "--output", help="output directory for .html and .txt files")

args = parser.parse_args()

def runcmd(cmd):
    if os.name == "nt":
        return subprocess.check_output(cmd, shell=True)
    with subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) as proc:
        return proc.communicate()

def compile(mjml: Path):
    fname = mjml.with_suffix(".html")
    runcmd(f"npx mjml {str(mjml)} -o {str(fname)}")
    if fname.is_file():
        print(f"Compiled {mjml.name}")

local_path = Path("mail")

threads = []

for mjml in [f for f in local_path.iterdir() if f.is_file() and "mjml" in f.suffix]:
    p = Process(target=compile, args=(mjml,))
    p.start()
    threads.append(p)

for thread in threads:
    thread.join()

html = [f for f in local_path.iterdir() if f.is_file() and "html" in f.suffix]

output = Path(args.output)  # local_path.parent / "build" / "data"
output.mkdir(parents=True, exist_ok=True)

for f in html:
    shutil.copy(str(f), str(output / f.name))
    print(f"Copied {f.name} to {str(output / f.name)}")
    txtfile = f.with_suffix(".txt")
    if txtfile.is_file():
        shutil.copy(str(txtfile), str(output / txtfile.name))
        print(f"Copied {txtfile.name} to {str(output / txtfile.name)}")
    else:
        print(
            f"Warning: {txtfile.name} does not exist. Text versions of emails should be supplied."
        )