import networkx as nx
import pandas as pd
from pyvis.network import Network

# CSVファイルを読み込む
df = pd.read_csv("graph.csv")

# 新しい列を読み込む
color_column = df["理解度"].tolist()
print(color_column)

# ノード名、ノード番号、前提条件の列を抽出
nodes_data = df["単元名"].tolist()
node_numbers = df["単元番号"].tolist()
conditions = df["前単元"].tolist()

G = nx.DiGraph()  # 有向グラフに変更

# ノード名を変更するための辞書を作成
node_names = {node_numbers[i]: f"{node_numbers[i]} - {nodes_data[i]}" for i in range(len(node_numbers))}

# ノードを追加
for node_number, node_name in node_names.items():
    G.add_node(node_name)

# ノードの色を設定
color_mapping = {
    0: 'crimson',    # 整数に変更
    1: 'orange',     # 整数に変更
    2: 'khaki', 
    3: 'palegreen',  # 整数に変更
    4: 'forestgreen',  # 整数に変更
    5: 'deepskyblue',  # 整数に変更
}

# ノード間に逆向きの有向エッジ（逆向きの矢印）を作成
for i in range(len(nodes_data)):
    condition = conditions[i]
    if pd.isna(condition) or condition == '99999':
        # 依存関係なし（'99999'は依存関係なしと考える）
        continue
    else:
        # 条件を','で分割し、リスト内に存在する依存ノードに対して逆向きの有向エッジを作成
        dependent_nodes = condition.split(',')
        for dependent_node in dependent_nodes:
            dependent_node = int(dependent_node)
            if dependent_node in node_numbers:
                G.add_edge(node_names[dependent_node], node_names[node_numbers[i]])  # 逆向きのエッジを追加

# Networkインスタンスを作成
net = Network(notebook=True)

# ノードと有向エッジをネットワークに追加
for node in G.nodes:
    color = color_mapping.get(color_column[node_numbers.index(int(node.split(" - ")[0]))], 'gray')
    net.add_node(node, color=color)

for edge in G.edges:
    net.add_edge(edge[0], edge[1], arrows='to')  # 'to' で矢印を有向エッジに設定

# ネットワークグラフを表示
net.show('network.html')
