### Here, we make active models with all the channels

import os

os.environ["OMP_NUM_THREADS"] = "1"  # export OMP_NUM_THREADS=4

import sys

sys.path.insert(1, "../helperScripts")

import numpy as np
import matplotlib.pyplot as plt
import features as fts
import MOOSEModel as mm
import expcells
import brute_curvefit as bcf
from copy import deepcopy
from tqdm import tqdm
import pandas as pd
from pprint import pprint
from goMultiprocessing import Multiprocessthis_appendsave
import pickle
import json
from scipy import signal
import warnings



# Load models from the JSON file
impmodels_list = []
file_path = "activemodels_imp.json"
with open(file_path, "r") as file:
    for line in file:
        impmodel = json.loads(line)
        impmodels_list.append(impmodel)

bnspasmodels_list = []
file_path = "activemodels_pas.json"
with open(file_path, "r") as file:
    for line in file:
        bnspasmodel = json.loads(line)
        bnspasmodels_list.append(bnspasmodel)

        # pprint(bnspasmodel["Parameters"])
        # t,i,v,ca = mm.runModel(bnspasmodel, 150e-12, refreshKin=False)
        # plt.plot(t,v, label='pas', c='C1')

onecomptmodels_list = []
file_path = "activemodels_1compt.json"
with open(file_path, "r") as file:
    for line in file:
        onecomptmodel = json.loads(line)
        onecomptmodels_list.append(onecomptmodel)

        # pprint(onecomptmodel["Parameters"])
        # t,i,v,ca = mm.runModel(onecomptmodel, 150e-12, refreshKin=False)
        # plt.plot(t,v, label='1compt', c='C2')

DBL150_list = [a["Features"]["DBL_1.5e-10"] for a in impmodels_list]
impmodels_list = np.array(impmodels_list)[np.argsort(DBL150_list)][::-1]
bnspasmodels_list = np.array(bnspasmodels_list)[np.argsort(DBL150_list)][::-1]
onecomptmodels_list = np.array(onecomptmodels_list)[np.argsort(DBL150_list)][::-1]

for i in range(len(onecomptmodels_list)):
    t,I,v,ca = mm.runModel(impmodels_list[i], 150e-12, refreshKin=False)
    plt.plot(t,v, label='imp', c='C0')
    t,I,v,ca = mm.runModel(bnspasmodels_list[i], 150e-12, refreshKin=False)
    plt.plot(t,v, label='pas', c='C1')
    t,I,v,ca = mm.runModel(onecomptmodels_list[i], 150e-12, refreshKin=False)
    plt.plot(t,v, label='1compt', c='C2')

    plt.legend()
    plt.xlabel('Time (s)')
    plt.ylabel('Membrane potential (V)')
    plt.show()