import os, sys, shutil, glob
from config.cfg import exp, cluster
from utils import symlink, copy, sed_inplace, append_file

def run(folder_obs_seq_final):
    rundir_program = '/home/fs71386/lkugler/data/DART-WRF/rundir/'

    files = sorted(glob.glob(folder_obs_seq_final+'/*.final'))  # input for obs_diag program
    fpath = rundir_program+'/obsdiag_inputlist.txt'
    print('writing', fpath)

    if os.path.exists(fpath):
        os.remove(fpath)

    with open(fpath, 'w') as f:
        for fin in files:
            f.write(fin)
            f.write('\n')


    print('ensure correct input.nml')
    copy(cluster.scriptsdir+'/../templates/input.nml',
         rundir_program+'/input.nml') #cluster.dartrundir+'/input.nml')
    sed_inplace(rundir_program+'/input.nml', '<n_ens>', str(int(exp.n_ens)))
    append_file(rundir_program+'/input.nml', cluster.scriptsdir+'/../templates/obs_def_rttov.VIS.nml')

    # run obs_diag
    print('running obs_diag program')
    os.chdir(rundir_program)
    symlink(cluster.dart_srcdir+'/obs_diag', rundir_program+'/obs_diag')
    try:
        os.remove(rundir_program+'/obs_seq_to_netcdf')
    except:
        pass
    os.system('./obs_diag >& obs_diag.log')  # caution, this overwrites obs_seq_to_netcdf

    outdir = '/'.join(folder_obs_seq_final.split('/')[:-1])
    print('moving output to', outdir+'/obs_diag_output.nc')
    copy(rundir_program+'/obs_diag_output.nc', outdir+'/obs_diag_output.nc')

    print('running obs_seq_to_netcdf program')
    shutil.copy(cluster.dart_srcdir+'/obs_seq_to_netcdf-bak', cluster.dart_srcdir+'/obs_seq_to_netcdf')
    symlink(cluster.dart_srcdir+'/obs_seq_to_netcdf', rundir_program+'/obs_seq_to_netcdf')
    os.system('./obs_seq_to_netcdf  >& obs_seq_to_netcdf.log')  # caution, overwrites its own binary?!
    print('moving output to', outdir+'/obs_seq...')
    os.system('mv '+rundir_program+'/obs_epoch_*.nc '+outdir+'/')


if __name__ == '__main__':
    #folder_obs_seq_final = '/home/fs71386/lkugler/data/sim_archive/exp_v1.11_LMU_filter2/obs_seq_final/'
    folder_obs_seq_final = str(sys.argv[1])
    run(folder_obs_seq_final)