#!/usr/bin/env python3

import sys
import pathlib
import os

from spice import header, change_names

_, src_dir, dst_dir = sys.argv

for a in pathlib.Path(src_dir).rglob("*.spice"):
    a = str(a)[len(src_dir):]
    src = a
    dst = a
    s = os.path.join(src_dir, src)
    d = os.path.join(dst_dir, dst)
    with open(s, "r") as f:
        data = f.read()

    sdir, sfile = src.split('/', 1)
    sbase, sext = sfile.split('.', 1)

    ddir, dfile = dst.split('/', 1)
    dbase, dext = dfile.split('.', 1)

    data = data.replace(sbase, dbase)
    data = change_names("sky130_fd_bd_sram", data)

    with open(d, "w") as f:
        f.write(header)
        f.write(data)

    print("Created", s, "from", d)

# "libraries/sky130_fd_bd_sram/v0.0.0/cells"
