from dataclasses import make_dataclass
from typing import Dict, List

NAMES: List[str] = [
    "Rec_act",
    "S2tot",
    "S3tot",
    "S4tot",
    "S_dephos",
    "S_dephosphos",
    "S_phos",
    "Ski_act3",
    "Ski_act2",
    "Ski_act1",
    "Ski_inh3",
    "Ski_inh2",
    "Ski_inh1",
    "Ski_turn",
    "Skil_act3",
    "Skil_act2",
    "Skil_act1",
    "Skil_inh3",
    "Skil_inh2",
    "Skil_inh1",
    "Skil_turn",
    "Dnmt3a_act3",
    "Dnmt3a_act2",
    "Dnmt3a_act1",
    "Dnmt3a_inh3",
    "Dnmt3a_inh2",
    "Dnmt3a_inh1",
    "Dnmt3a_turn",
    "Sox4_act3",
    "Sox4_act2",
    "Sox4_act1",
    "Sox4_inh3",
    "Sox4_inh2",
    "Sox4_inh1",
    "Sox4_turn",
    "Jun_act3",
    "Jun_act2",
    "Jun_act1",
    "Jun_inh3",
    "Jun_inh2",
    "Jun_inh1",
    "Jun_turn",
    "Smad7_act3",
    "Smad7_act2",
    "Smad7_act1",
    "Smad7_inh3",
    "Smad7_inh2",
    "Smad7_inh1",
    "Smad7_turn",
    "Klf10_act3",
    "Klf10_act2",
    "Klf10_act1",
    "Klf10_inh3",
    "Klf10_inh2",
    "Klf10_inh1",
    "Klf10_turn",
    "Bmp4_act3",
    "Bmp4_act2",
    "Bmp4_act1",
    "Bmp4_inh3",
    "Bmp4_inh2",
    "Bmp4_inh1",
    "Bmp4_turn",
    "Cxcl15_act3",
    "Cxcl15_act2",
    "Cxcl15_act1",
    "Cxcl15_inh3",
    "Cxcl15_inh2",
    "Cxcl15_inh1",
    "Cxcl15_turn",
    "Dusp5_act3",
    "Dusp5_act2",
    "Dusp5_act1",
    "Dusp5_inh3",
    "Dusp5_inh2",
    "Dusp5_inh1",
    "Dusp5_turn",
    "Tgfa_act3",
    "Tgfa_act2",
    "Tgfa_act1",
    "Tgfa_inh3",
    "Tgfa_inh2",
    "Tgfa_inh1",
    "Tgfa_turn",
    "Pdk4_act3",
    "Pdk4_act2",
    "Pdk4_act1",
    "Pdk4_inh3",
    "Pdk4_inh2",
    "Pdk4_inh1",
    "Pdk4_turn",
    "init_Rec",
    "k_on_223",
    "k_on_224",
    "k_on_233",
    "k_on_234",
    "k_on_244",
    "k_on_334",
    "k_on_344",
    "k_on_222",
    "k_on_333",
    "k_on_444",
    "kdiss_SS",
    "pRec_degind",
    "sd_Bmp4",
    "sd_Cxcl15",
    "sd_Dnmt3a",
    "sd_Dusp5",
    "sd_Jun",
    "sd_Klf10",
    "sd_Pdk4",
    "sd_Ski",
    "sd_Skil",
    "sd_Smad7",
    "sd_Sox4",
    "sd_Tgfa",
    "gene_turn",
    "gene_act1",
    "gene_act2",
    "gene_act3",
    "gene_inh1",
    "gene_inh2",
    "gene_inh3",
]

NUM: int = len(NAMES)

Parameters = make_dataclass(
    cls_name="Parameters",
    fields=[(name, int) for name in NAMES],
    namespace={"NAMES": NAMES, "NUM": NUM},
    frozen=True,
)

name2idx: Dict[str, int] = {k: v for v, k in enumerate(NAMES)}

C = Parameters(**name2idx)

del name2idx
