#!/usr/bin/env python3

import os, sys, argparse

h_templ = '''#pragma once

int %s(void);
'''

c_templ = '''#include"%s.h"

int %s(void) {
    return 0;
}
'''

parser = argparse.ArgumentParser()
parser.add_argument('--searchdir', required=True)
parser.add_argument('--outdir', required=True)
parser.add_argument('ifiles', nargs='+')

options = parser.parse_args()

searchdir = options.searchdir
outdir = options.outdir
ifiles = options.ifiles

rel_ofiles = []

for ifile in ifiles:
    if not ifile.startswith(options.searchdir):
        sys.exit(f'Input file {ifile} does not start with search dir {searchdir}.')
    rel_ofile = ifile[len(searchdir):]
    if rel_ofile[0] == '/' or rel_ofile[0] == '\\':
        rel_ofile = rel_ofile[1:]
    rel_ofiles.append(os.path.splitext(rel_ofile)[0])

ofile_bases = [os.path.join(outdir, i) for i in rel_ofiles]

for i, ifile_name in enumerate(ifiles):
    proto_name = open(ifile_name).readline().strip()
    h_out = ofile_bases[i] + '.h'
    c_out = ofile_bases[i] + '.c'
    os.makedirs(os.path.split(ofile_bases[i])[0], exist_ok=True)
    open(h_out, 'w').write(h_templ % (proto_name))
    open(c_out, 'w').write(c_templ % (proto_name, proto_name))
