import os
from pathlib import Path
import shutil
import glob

mass_resolution_levels = ["M5"]
softening_resolutions_in_kpc = [0.25, 0.5]
smoothing_resolutions_in_kpc = [0.0775, 0.0245, 0.00775]
star_formation_efficiencies = [0.00316]
#star_formation_efficiencies = [0.01, 0.001]

runtime_in_full_hours = 72

localdir = os.getcwd()

for mass in mass_resolution_levels:
    Path(os.path.join(localdir, mass)).mkdir(parents=True, exist_ok=True)

    for soft in softening_resolutions_in_kpc:
        for smooth in smoothing_resolutions_in_kpc:
            for sfe in star_formation_efficiencies:
                ##########################################
                # start from the original local directory
                ##########################################
                os.chdir(localdir)

                ##########################################
                # name and create runfolder
                ##########################################
                runname = "Galaxy" + mass + \
                          "_soft%4.4ipc"%(int(soft*1000)) + \
                          "_hmin%06.2fpc"%(smooth*1000.) + \
                          "_sfe%06.3f"%(sfe)

                folder=os.path.join(localdir, mass, runname) 
                Path(folder).mkdir(parents=True, exist_ok=True)

                ##########################################
                # change working directory to runfolder
                ##########################################
                os.chdir(folder)

                ##########################################
                # copy fiducidal files into runfolder
                ##########################################
                for fidfile in glob.glob("../../fiducial_files/*"):
                    shutil.copy2(fidfile, "./")   
            
                ##########################################
                # modify the yaml file for each run
                ##########################################
                f = open("isolated_galaxy.yml", "rt")
                data = f.read()
                data = data.replace('RUNNAME', runname)
                data = data.replace('SOFTENING', '%.4f'%(soft))
                data = data.replace('INITIALCONDITIONS', '%s_disk'%(mass))
                data = data.replace('HMINRATIO', '%.4f'%(smooth / (1.55 * soft)))
                data = data.replace('SFEFFICIENCY', '%.4f'%(sfe))
                data = data.replace('EOSDENSITY', '1e-4')
                data = data.replace('EOSTEMPERATURE', '10.')
                data = data.replace('EOSSLOPE', '0.')
                f.close()        

                f = open("isolated_galaxy.yml", "wt")
                f.write(data)
                f.close()        

                ##########################################
                # modify the submission script for each run
                ##########################################
                f = open("submit.job", "rt")
                data = f.read()
                data = data.replace('RUNNAME', runname)
                data = data.replace('TIMEINHOURS', '%2.2i'%(int(runtime_in_full_hours)))
                f.close()        

                f = open("submit.job", "wt")
                f.write(data)
                f.close()    

                ##########################################
                # modify the resubmission script for each run
                ##########################################
                f = open("resubmit.job", "rt")
                data = f.read()
                data = data.replace('RUNNAME', runname)
                f.close()

                f = open("resubmit.job", "wt")
                f.write(data)
                f.close()
    
                ##########################################
                # submit jobs
                ##########################################
                os.system("sbatch submit.job")