#!/usr/bin/env python
import os
import glob
from argparse import ArgumentParser
from collections import OrderedDict

import pylab as pl
import numpy as np

import pandas as pd
import isoclassify.pipeline

def main():
    p = ArgumentParser()
    subp = p.add_subparsers(title="subcommands", dest='subcommand')

    p2 = subp.add_parser('run',help='run isoclassify')
    p2.add_argument('method',choices=['direct', 'grid'],help='method')
    p2.add_argument('id_starname', help='name of star')
    p2.add_argument('-o','--outdir',default='./')
    p2.add_argument('--csv', help='path to csv file')
    p2.add_argument(
        '--plot', choices=['none', 'show', 'save-pdf','save-png'], 
        default='save-png',
        help="plotmode: none: Don't create plots (default), "
        "show: create plot in interactive mode, "
        "save-pdf: save plot as pdf file"
    )
    p2.set_defaults(func=run)

    p2 = subp.add_parser('batch', description="Create batch jobs")
    p2.add_argument('method',choices=['direct', 'grid'],help='method')
    p2.add_argument('csv', type=str, help='list of parameters')
    p2.add_argument( 
        '-o','--baseoutdir',default='./',help='base path of output directory'
    )
    p2.add_argument('--plot', default='save-png',help="passed to run command")
    p2.set_defaults(func=batch)

    p2 = subp.add_parser('scrape-output', description="Combine batch outputs")
    p2.add_argument('baseoutdir', type=str,help='base path of output directory')
    p2.add_argument('csvfn', help='Name of combined csv file')
    p2.set_defaults(func=scrape_output)
    args = p.parse_args()
    args.func(args)

def run(args):
    isoclassify.pipeline.run(**vars(args))

def batch(args):
    df = pd.read_csv(args.csv,engine='python')
    print("#!/bin/sh")
    for i, row in df.iterrows():
        fmt = dict(**row)
        fmt = dict(fmt,**vars(args))
        fmt['outdir'] = "{baseoutdir:}/{id_starname:}".format(**fmt)
        s = ""
        s+="mkdir -p {outdir:}; "
        s+="isoclassify run {method:} {id_starname:} "
        s+="--outdir {outdir:} "
        s+="--csv {csv:} "
        s+="--plot {plot:} "
        s+="&> {outdir:}/output.log"
        s = s.format(**fmt)
        print(s) 

def scrape_output(args):
    path = args.baseoutdir
    df = isoclassify.pipeline.scrape_csv(path)
    df.to_csv(args.csvfn)
    
if __name__=="__main__":
    main()


