#!python

import os

from bayesn import SEDmodel
import argparse
from ruamel.yaml import YAML

yaml = YAML(typ='safe')

parser = argparse.ArgumentParser()
parser.add_argument('input', type=str)
parser.add_argument('--filters', type=str, required=False)
parser.add_argument('--outputdir', type=str, required=False)
parser.add_argument('--load_model', type=str, required=False)
parser.add_argument('--mode', type=str, required=False)
parser.add_argument('--num_chains', type=int, required=False)
parser.add_argument('--chain_method', type=str, required=False)
parser.add_argument('--initialisation', type=str, required=False)
parser.add_argument('--l_knots', type=float, required=False, nargs='*')
parser.add_argument('--tau_knots', type=float, required=False, nargs='*')
parser.add_argument('--map', type=str, required=False)
parser.add_argument('--data_root', type=str, required=False)
parser.add_argument('--data_table', type=str, required=False)
parser.add_argument('--version_photometry', type=str, required=False)
parser.add_argument('--drop_bands', type=str, required=False, nargs='*')
parser.add_argument('--num_warmup', type=int, required=False)
parser.add_argument('--num_samples', type=int, required=False)
parser.add_argument('--snana', type=bool, required=False)
parser.add_argument('--jobsplit', type=int, nargs=2)
parser.add_argument('--outfile_prefix', type=str, required=False)
parser.add_argument('--private_data_path', type=str, required=False, nargs='*')
parser.add_argument('--sim_prescale', type=int, required=False)
cmd_args = parser.parse_args()

if not os.path.exists(cmd_args.input):
    raise FileNotFoundError(f'Specified input file ({cmd_args.input}) was not found, please provide the path to an '
                            f'input yaml file or create an input.yaml in your current directory')
with open(cmd_args.input, 'r') as file:
    args = yaml.load(file)

# If no default model to load is specified in input.yaml or via command line, assume T21
if 'load_model' not in args.keys() and cmd_args.load_model is None:
    args['load_model'] = 'T21_model'

# If no default filters.yaml is specified in input.yaml, use argparse value (including default of None)
if 'filters' not in args.keys():
    args['filters'] = cmd_args.filters

model = SEDmodel(load_model=args['load_model'], filter_yaml=args['filters'])
model.run(args, cmd_args)
