import pandas as pd
import numpy as np

HC_CTRL = pd.read_csv("data/parameters/parameters_HC_CTRL_MSE.csv")
HC_LITM = pd.read_csv("data/parameters/parameters_HC_LITM_MSE.csv")
LR_CTRL = pd.read_csv("data/parameters/parameters_LR_CTRL_MSE.csv")
LR_LITM = pd.read_csv("data/parameters/parameters_LR_LITM_MSE.csv")
NR_CTRL = pd.read_csv("data/parameters/parameters_NR_CTRL_MSE.csv")
NR_LITM = pd.read_csv("data/parameters/parameters_NR_LITM_MSE.csv")

HCC_FI = pd.read_csv("data/parameters/simFIs_HC_CTRL_MSE.csv")
HCL_FI = pd.read_csv("data/parameters/simFIs_HC_LITM_MSE.csv")
LRC_FI = pd.read_csv("data/parameters/simFIs_LR_CTRL_MSE.csv")
LRL_FI = pd.read_csv("data/parameters/simFIs_LR_LITM_MSE.csv")
NRC_FI = pd.read_csv("data/parameters/simFIs_NR_CTRL_MSE.csv")
NRL_FI = pd.read_csv("data/parameters/simFIs_NR_LITM_MSE.csv")

# parameters to be optimized
free_params = {
    'bk': ['gkbar'],  # big conductance, calcium-activated potassium channel
    'ichan2': ['gnatbar', 'vshiftma', 'vshiftmb', 'vshiftha', 'vshifthb', 'vshiftnfa', 'vshiftnfb', 'vshiftnsa',
               'vshiftnsb',
               'gkfbar', 'gksbar', 'gl'],  # KDR channel conductances, sodium conductance
    'ka': ['gkabar'],  # A-type (fast inactivating) Kv channel
    'kir': ['gkbar'],  # inward rectifier potassium (Kir) channel
    'km': ['gbar'],  # KM channel
    'lca': ['glcabar'],  # l-type calcium
    'nca': ['gncabar'],  # n-type calcium
    'sk': ['gskbar'],  # small conductance potassium channel
    'tca': ['gcatbar']  # t-type calcium
}


dfs = [HC_CTRL, HC_LITM, LR_CTRL, LR_LITM, NR_CTRL, NR_LITM]

dfnames = ["HC_CTRL", "HC_LITM", "LR_CTRL", "LR_LITM", "NR_CTRL", "NR_LITM"]

FIs = [HCC_FI, HCL_FI, LRC_FI, LRL_FI, NRC_FI, NRL_FI]
FInames = ["HCC_FI", "HCL_FI", "LRC_FI", "LRL_FI", "NRC_FI", "NRL_FI"]

cellids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


def insert_foldchange(df, dfname, free_params, cellids):
    mod = []
    for key, value in free_params.items():
        for i in range(0, len(value)):
            mod.append(key)
    for i, j in zip(cellids, range(4, 24, 2)):
        fc = df['Cell_%s' % cellids[i]] / df['baseline']
        df.insert(loc=j, column="fc_%s" % cellids[i], value=fc)
    df.insert(loc=1, column="mod", value=mod)
    df.to_csv("data/parameters/paramFC_%s.csv" % dfname)


for df, dfname in zip(dfs, dfnames):
    insert_foldchange(df, dfname, free_params, cellids)


def restructureFI(FI, FIname, cellids):
    currs = FI['I']
    freqs = FI['F']
    freqs = freqs.to_numpy()
    restructuredFI = pd.DataFrame({"I": currs[0:12]})
    for i, j in zip(cellids, range(0, 120, 12)):
        singlecell = freqs[0 + j:12 + j]
        restructuredFI.insert(loc=i + 1, column="Cell_%s" % cellids[i], value=singlecell)
    restructuredFI.to_csv("data/parameters/restruct_FIs_%s.csv" % FIname)


for FI, FIname in zip(FIs, FInames):
    restructureFI(FI, FIname, cellids)