#!python
# -*- coding: utf-8 -*-

'''
This script uses the Generator class to generate the scripts corresponding to some simulations.
'''

import argparse

from hateno import utils, jsonfiles
from hateno.folder import Folder
from hateno.generator import Generator
from hateno.errors import *

def addArguments(parser):
	parser.add_argument('--namers', type = argparse.FileType('r'), help = 'path to a file defining custom namers')
	parser.add_argument('--fixers', type = argparse.FileType('r'), help = 'path to a file defining custom fixers')
	parser.add_argument('--config', type = str, help = 'name of the config to use')
	parser.add_argument('--output-dir', type = str, help = 'folder to create')
	parser.add_argument('--empty-output', action = 'store_true', help = 'ensure the output directory is empty')
	parser.add_argument('folder_path', type = str, help = 'path to the simulations folder')
	parser.add_argument('simulations_list', type = str, help = 'path to the file where the simulations list can be found')

def action(args):
	folder = Folder(args.folder_path)

	if args.namers is not None:
		folder.namers.loadFromModule(utils.loadModuleFromFile(args.namers.name))

	if args.fixers is not None:
		folder.fixers.loadFromModule(utils.loadModuleFromFile(args.fixers.name))

	generator = Generator(folder)

	simulations = jsonfiles.read(args.simulations_list, allow_generator = True)
	generator.add(simulations)

	if args.output_dir is None:
		print('\n'.join(generator.parse()['data_lists']['COMMAND_LINES']))
		exit()

	try:
		generator.generate(args.output_dir, args.config, empty_dest = args.empty_output)

	except DestinationFolderExistsError:
		print('The output directory already exists.')

if __name__ == '__main__':
	parser = argparse.ArgumentParser(description = 'Generate command lines and scripts to create simulations.')
	addArguments(parser)
	action(parser.parse_args())
