cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-c','--compiler', help='compiler suite and version')
cmd_parser.add_argument('--spack_base_image', help='spack base image')
cmd_parser.add_argument('-i', '--input_dir', help='input directory')
cmd_parser.add_argument('--arch_family', help='target image arch family e.g., amd64, arm64, ppc64le')
cmd_parser.add_argument('-o', '--output_dir', help='output directory')
args = cmd_parser.parse_args()


if not os.path.exists(args.input_dir):
    raise RuntimeError('Cannot open directory with templates')

template_loader = jinja2.FileSystemLoader(searchpath=args.input_dir)
template_env = jinja2.Environment(loader=template_loader)

# concretize custom builder image
Aux.print_bar()
template = template_env.get_template('Dockerfile.spack.t')
custom_builder = template.render(compiler=args.compiler,
                                 spack_base_image=args.spack_base_image,
                                 arch_family=Aux.adjust_arch_family(args.arch_family))
print(custom_builder)

if not os.path.exists(args.output_dir):
    raise RuntimeError('Cannot open the output directory')


Aux.write_to_file(file_path=os.path.join(args.output_dir, f'custom-spack-{args.arch_family}.dockerfile'), 
                  content=custom_builder)
os_map = {
    'ubuntu-1804': 'ubuntu:18.04',
    'ubuntu-1604': 'ubuntu:16.04',
    'centos-7': 'centos:7',
    'centos-6': 'centos:6'
}

package_manager = {
    'ubuntu-1804': 'apt',
    'ubuntu-1604': 'apt',
    'centos-7': 'yum',
    'centos-6': 'yum'
}

spack_spec = template.render(
    compiler=args.compiler,
    mpi=args.mpi,
    gpu=args.gpu,
    arch_family=Aux.adjust_arch_family(args.arch_family),
    arch=args.arch,
    builder_image=args.builder_image,
    target_image=os_map[args.target_image],
    install_command=package_manager[args.target_image])
print(spack_spec)

if not os.path.exists(args.output_dir):
    raise RuntimeError('Cannot open the output directory')

Aux.write_to_file(file_path=os.path.join(args.output_dir, 'spack.yaml'),
                  content=spack_spec)