import json
from matplotlib import pyplot as plt
from island.match import Match
from island.matches import Matches
import numpy as np

matches = Matches('wos-data-new-2')
max_round = 14

coopr = []
yerr_min = []
yerr_max = []
x = np.arange(max_round)
bx = []
y = np.zeros((5, max_round))
sy = np.zeros(max_round)

survivals = {}
with open('survivals-2.json', 'r') as f:
    survivals = json.load(f)


for i in range(max_round):
    co = {}
    for j in range(len(matches.data)):
        if str(i+1) not in survivals[matches.names[j]]:
            continue
        for k in survivals[matches.names[j]][str(i+1)]:
            co[k] = 0
        rows = matches.data[j].query('action', 'done').where(lambda x: x['rno']==i+1).raw_data
        for row in rows:
            if row['a'] in co:
                co[row['a']] += 1
            if row['b'] in co:
                co[row['b']] += 1

    for j in co.values():
        if j <= 4:
            y[j][i] += 1
        else:
            y[4][i] += 1

        sy[i] += 1
    # bx.append(list(co.values()))

# plt.figure()
# plt.boxplot(bx, showmeans=True, meanline=True)
# plt.show()
labels = ["k = 0 ", "k = 1", "k = 2", "k = 3", "k ⩾ 4"]
colors = ['#0984e3', '#fdcb6e', '#00b894', '#6c5ce7', '#d63031', '#0984e3']
y /= sy
fig = plt.figure(figsize=(6, 4))
ax = fig.gca()
ax.stackplot(x+1, y, labels=labels, colors=colors)
ax.set_xticks(x+1)
ax.set_xticklabels(x+1)
ax.set_xlim(1,max_round)
ax.set_ylim(0, 1)
ax.set_xlabel('Round')
ax.set_ylabel('Fraction of k')
ax.legend()
plt.tight_layout()
plt.show()
# plt.savefig('graph/interaction_per_round.eps')