import os
from neuron import h
import numpy as np
import platform
from modules.makeParams import *
from modules.RejectionProtocols import *
import matplotlib.pyplot as plt
import pickle
import sys
import pandas as pd

if platform.system() == 'Linux':
    h.nrn_load_dll(os.path.join("modFiles/x86_64/.libs/libnrnmech.so"))
else:
    h.nrn_load_dll(os.path.join("modFiles","nrnmech.dll"))
h.load_file('stdrun.hoc') #so you can use run command

if len(sys.argv) < 4:
    print("trials, seed, voltage filename, parameters filename")
    quit()

#hyperparameters:
dt = 0.2
tstop = 2550#ms
maxstep = 10
vinit = -51#mV
Trials = int(sys.argv[1])
seed  = int(sys.argv[2])


#make a list of LargeCells then change their parameters to be random

params, LCs = makeRandomCellsLV1(Trials,seed)

#make stims for each LC :

iclamps = []
for i in range(0,Trials):

    iclamp = h.IClamp(LCs[i].soma(0.5))
    iclamp.delay = 300
    iclamp.dur = 500
    iclamp.amp = -1
    iclamps.append(iclamp)


#recording variables:
v = []

for i in range(0,Trials):
    v.append(h.Vector().record(LCs[i].soma(0.5)._ref_v))             # Membrane potential vector

h.dt=0.2
h.finitialize(-51)
h.continuerun(2550)
print("done")
V = pd.DataFrame(data = v,dtype='float32')
Params = pd.DataFrame(data = params,dtype = 'float32')
V.to_pickle(os.path.join("output","LV1",sys.argv[3] +  ".pkl"))
Params.to_pickle(os.path.join("output","LV1",sys.argv[4] +  ".pkl"))