# %%
PROJECT_PATH = '/home/md/Work/ligalytics/leagues_stable/'
import os, sys
sys.path.insert(0, PROJECT_PATH)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "leagues.settings")
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
import random
import time

# XPRESS ENVIRONMENT
os.environ['XPRESSDIR'] = "/opt/xpressmp_8.4"
os.environ['XPRESS'] = "/opt/xpressmp_8.4/bin"
os.environ['LD_LIBRARY_PATH'] = os.environ['XPRESSDIR']+"/lib:"+os.environ['LD_LIBRARY_PATH']
os.environ['DYLD_LIBRARY_PATH'] = os.environ['XPRESSDIR']+"/lib:"
os.environ['SHLIB_PATH'] = os.environ['XPRESSDIR']+"/lib:"
os.environ['LIBPATH'] = os.environ['XPRESSDIR']+"/lib:"
# os.environ['PYTHONPATH'] =os.environ['XPRESSDIR']+"/lib:"+os.environ['PYTHONPATH']
os.environ['PYTHONPATH'] =os.environ['XPRESSDIR']+"/lib:"
os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprs.jar:"
os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprb.jar:"+os.environ['CLASSPATH']
os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprm.jar:"+os.environ['CLASSPATH']
os.environ['PATH'] =os.environ['XPRESSDIR']+"/bin:"+os.environ['PATH']


from leagues import settings
settings.DATABASES['default']['NAME'] = PROJECT_PATH+'/db.sqlite3'

import django
django.setup()

from scheduler.models import *
from pulp import *
import csv

import xpress as xp
xp.controls.outputlog = 0



scenario = Scenario.objects.get(id=32)

# %%

order = {}

order['FC Bayern München'] = 1
order['Manchester City FC'] = 2
order['Liverpool FC'] = 3
order['Real Madrid CF'] = 4
order['Chelsea FC'] = 5
order['FC Barcelona'] = 6
order['Paris Saint-Germain'] = 7
order['Juventus'] = 8
order['Club Atlético de Madrid'] = 9
order['Sevilla FC'] = 10
order['RB Leipzig'] = 11
order['Tottenham Hotspur'] = 12
order['AFC Ajax'] = 13
order['FC Porto'] = 14
order['Arsenal FC'] = 15
order['Borussia Dortmund'] = 16
order['FC Salzburg'] = 17
order['FC Shakhtar Donetsk'] = 18
order['FC Internazionale Milano'] = 19
order['SSC Napoli'] = 20
order['Eintracht Frankfurt'] = 21
order['SL Benfica'] = 22
order['Sporting Clube de Portugal'] = 23
order['Bayer 04 Leverkusen'] = 24
order['Rangers FC'] = 25
order['GNK Dinamo'] = 26
order['FK Crvena zvezda'] = 27
order['Olympique de Marseille'] = 28
order['F.C. Copenhagen'] = 29
order['Club Brugge'] = 30
order['AC Milan'] = 31
order['PSV Eindhoven'] = 32
order['Celtic FC'] = 33
order['FC Viktoria Plzeň'] = 34
order['AS Monaco'] = 35
order['Maccabi Haifa FC'] = 36







# %%


teams = Team.objects.filter(season=scenario.season,active=True).order_by('pot','country')


countries = list(set(list(teams.values_list('country', flat=True))))


# print(countries)


# %%


getTeamByID = {
    t.id:t for t in teams
}

getPotByID = {
    t.id:t.pot for t in teams
}

getTeamByName = {
    t.name:t for t in teams
}

getCountryByTeamID = {
    t.id:t.country for t in teams
}




played_countries = {
    (t1, c):0 for c in countries for t1 in teams
}
stats = {
    (t1,t2):0 for t1 in teams for t2 in teams
}
random_stats = {
    (t1,t2):0 for t1 in teams for t2 in teams
}


pots = {
    t1:{
        p:0 for p in range(1,5)
    }
    for t1 in teams
}
simulations = 0
maxVal = 1
minVal = 99999999
maxCVal = 1
minCVal = 9999999


with open('verteilung_draw2.csv', newline='') as csvfile:    
# with open('verteilung_random.csv', newline='') as csvfile:    
    reader = csv.reader(csvfile)
    next(reader, None) 
    for row in reader:
        simulations = int(row[0])


        team = getTeamByID[int(row[1])]
        Aopps = [getTeamByID[int(t)] for t in row[2].split(";")]
        for o in Aopps:
            stats[team,o] += 1
            pots[team][getPotByID[o.id]] += 1
            played_countries[team,o.country] += 1
        Bopps = [getTeamByID[int(t)] for t in row[3].split(";")]
        for o in Bopps:
            stats[team,o] += 1
            pots[team][getPotByID[o.id]] += 1
            played_countries[team,o.country] += 1
        Copps = [getTeamByID[int(t)] for t in row[4].split(";")]
        for o in Copps:
            stats[team,o] += 1
            pots[team][getPotByID[o.id]] += 1
            played_countries[team,o.country] += 1
        Dopps = [getTeamByID[int(t)] for t in row[5].split(";")]
        for o in Dopps:
            stats[team,o] += 1
            pots[team][getPotByID[o.id]] += 1
            played_countries[team,o.country] += 1
        
        if stats[team,o] > maxVal:
            maxVal = stats[team,o]
    
        if played_countries[team,o.country] > maxCVal:
            maxCVal = played_countries[team,o.country]



# with open('verteilung_draw.csv', newline='') as csvfile:    
with open('verteilung_random.csv', newline='') as csvfile:    
    reader = csv.reader(csvfile)
    next(reader, None) 
    for row in reader:
        # simulations = int(row[0])


        team = getTeamByID[int(row[1])]
        Aopps = [getTeamByID[int(t)] for t in row[2].split(";")]
        for o in Aopps:
            random_stats[team,o] += 1
            # pots[team][getPotByID[o.id]] += 1
            # played_countries[team,o.country] += 1
        Bopps = [getTeamByID[int(t)] for t in row[3].split(";")]
        for o in Bopps:
            random_stats[team,o] += 1
            # pots[team][getPotByID[o.id]] += 1
            # played_countries[team,o.country] += 1
        Copps = [getTeamByID[int(t)] for t in row[4].split(";")]
        for o in Copps:
            random_stats[team,o] += 1
            # pots[team][getPotByID[o.id]] += 1
            # played_countries[team,o.country] += 1
        Dopps = [getTeamByID[int(t)] for t in row[5].split(";")]
        for o in Dopps:
            random_stats[team,o] += 1
            # pots[team][getPotByID[o.id]] += 1
            # played_countries[team,o.country] += 1


diff = {}
mindval = 999999
maxdval = 0
for key in random_stats.keys():
    diff[key] = stats[key]/simulations - random_stats[key]/simulations
    if diff[key] > maxdval:
        maxdval = diff[key]
    if diff[key] > 0 and diff[key] < mindval:
        mindval = diff[key]



for key, val in stats.items():
    if val > 0 and val < minVal:
        minVal = val

print(minVal)


for key, val in played_countries.items():
    if val > 0 and val < minCVal:
        minCVal = val




# for t in pots:
#     print(t,pots[t])


def heatmap_color_for(value):
    if value <= 0.5:
        g = 256
        r = 2 * max(0,value) * 256
    if value > 0.5:
        g = 2*(1-min(1,value))*256
        r = 256
    return f"rgb({r},{g},{0})"



sol = " \
<style>     \
    table, th, td {     \
            border: 1px solid black;     \
            border-collapse: collapse;     \
            text-align: center;     \
            min-width:40px;     \
            padding:3px;     \
            margin: 3px;     \
            font-family : Arial;\
    }     \
    h1 {\
        font-family : Arial;\
    }\
\
    #etable td:nth-child(10),#etable th:nth-child(10) { border-right: 5px solid black; }\
    #etable td:nth-child(19),#etable th:nth-child(19) { border-right: 5px solid black; }\
    #etable td:nth-child(28),#etable th:nth-child(28) { border-right: 5px solid black; }\
    tr:nth-child(9) { border-bottom: 5px solid black; }\
    tr:nth-child(18) { border-bottom: 5px solid black; }\
    tr:nth-child(27) { border-bottom: 5px solid black; }\
</style> \
"

sol += "<h1>Probabilities of games</h1>"
sol += "<table id='etable' style='border:1px solid black'>\n"
sol += "<thead>\n"
sol += "<tr>"
sol += "<th></th>"
sol += "<th colspan=9 style='border-right: 5px solid black;'>Pot A</th>"
sol += "<th colspan=9 style='border-right: 5px solid black;'>Pot B</th>"
sol += "<th colspan=9 style='border-right: 5px solid black;'>Pot C</th>"
sol += "<th colspan=9>Pot D</th>"
sol += "</tr>"
sol += "<tr>\n"
sol += f"<th>n = {simulations+1}</th>\n"
# for o in order:
for t in teams:
    # t = getTeamByName[o]
    sol += f"<th>{t.shortname}</th>\n"
sol += "</tr>\n"
sol += "</thead>\n"
sol += "<tbody>\n"
# for o1 in order:
for t1 in teams:
    # t1 = getTeamByName[o1]
    sol += "<tr>\n"
    sol += f"<td>{t1.shortname}</td>"
    # for o2 in order:
    for t2 in teams:
        # t2 = getTeamByName[o2]
        color = heatmap_color_for((stats[t1,t2]-minVal)/(maxVal-minVal))
        if stats[t1,t2] == 0:
            color = 'grey'
        val = f"{round(round(stats[t1,t2]/simulations,2)*100)}%"
        # val = stats[t1,t2]
        sol += f"<td style='background-color:{color}'>{val}</td>"
    sol += "</tr>\n"

sol += "</tbody>\n"
sol += "</table>\n"

sol += "<br>"
sol += "<br>"
sol += "<br>"

sol += "<h1>Average number of Games against other countries</h1>"
sol += "<table style='border:1px solid black'>\n"
sol += "<thead>\n"
sol += "<tr>"
sol += "<tr>\n"
sol += f"<th>n = {simulations+1}</th>\n"
for c in countries:
    sol += f"<th>{c}</th>\n"
sol += "</tr>\n"
sol += "</thead>\n"
sol += "<tbody>\n"
# for o1 in order:
for t1 in teams:
    # t1 = getTeamByName[o1]
    sol += "<tr>\n"
    sol += f"<td>{t1.shortname}</td>"
    for c in countries:        
        # color = heatmap_color_for((played_countries[t1,c]-minCVal)/(maxCVal-minCVal))
        color = 'lightsteelblue'
        if played_countries[t1,c] == 0:
            color = 'grey'
        # val = f"{round(round(played_played_countries[t1][c]/simulations,2)*100)}%"
        val = f"{round(played_countries[t1,c]/(simulations+1),2)}"
        # val = stats[t1,t2]
        sol += f"<td style='background-color:{color}'>{val}</td>"
    sol += "</tr>\n"

sol += "</tbody>\n"
sol += "</table>\n"


sol += "<br>"
sol += "<br>"
sol += "<br>"

sol += "<h1>Draw procedure compared to evenly distributed encounters</h1>"
sol += "<table style='border:1px solid black'>\n"
sol += "<thead>\n"
sol += "<tr>\n"
sol += f"<th>n = {simulations+1}</th>\n"
# for o in order:
for t in teams:
    # t = getTeamByName[o]
    sol += f"<th>{t.shortname}</th>\n"
sol += "</tr>\n"
sol += "</thead>\n"
sol += "<tbody>\n"
# for o1 in order:
for t1 in teams:
    # t1 = getTeamByName[o1]
    sol += "<tr>\n"
    sol += f"<td>{t1.shortname}</td>"
    # for o2 in order:
    for t2 in teams:
        # t2 = getTeamByName[o2]
        color = heatmap_color_for((abs(diff[t1,t2])-mindval)/(maxdval-mindval))
        if stats[t1,t2] == 0:
            color = 'grey'
        val = f"{diff[t1,t2]}%"
        # val = stats[t1,t2]
        sol += f"<td style='background-color:{color}'>{round(round(diff[t1,t2],2)*100)}%</td>"
    sol += "</tr>\n"

sol += "</tbody>\n"
sol += "</table>\n"



with open(f'stats.html', 'w') as f:
    f.write(sol)







# %%
