import requests
import datetime
from math import inf
import time

start = time.time()
data = requests.get("https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/orp.json").json()["data"]
print(time.time()-start)


now = datetime.date.today()
yesterDay = now.replace(day=now.day-1)

def pozitivni(now):
    last14days = 0
    last14days65 = 0
    for orp in reversed(data):
        if now - datetime.date.fromisoformat(orp["datum"]) < datetime.timedelta(days=14):
            if (now - datetime.date.fromisoformat(orp["datum"])) % datetime.timedelta(days=7) == datetime.timedelta(days=0):
                #print(orp["datum"])
                last14days += orp["incidence_7"]
                last14days65 += orp["incidence_65_7"]
        else:
            break
    return (last14days/10693939)*100000, (last14days65/2131630)*100000

def R(now):
    R = [[],[]]
    for orp in reversed(data):
        if now - datetime.date.fromisoformat(orp["datum"]) < datetime.timedelta(days=10):
            if (now - datetime.date.fromisoformat(orp["datum"])) % datetime.timedelta(days=5) == datetime.timedelta(days=0):
                #print(orp["datum"])
                R[0 if now == datetime.date.fromisoformat(orp["datum"]) else 1].append(orp["incidence_7"])
        else:
            break
    return sum(R[0])/sum(R[1])

def pozitivitaTestu(now):
    testy = 0
    last7days = 0
    for orp in reversed(data):
        if datetime.date.fromisoformat(orp["datum"]) == now:
            testy += orp["testy_7"]
            last7days += orp["incidence_7"]
    return last7days/testy

def index(now):
    yesterDay = now.replace(day=now.day-1)
    pozitivitaDict = {10:0,25:2,50:4,120:7,240:10,480:13,960:16,inf:20}
    rDict = {0.8:0, 1.0:5, 1.2:10, 1.4:15,1.6:20,1.9:25,inf:30}
    testyDict = {0.03:0,0.07:3,0.11:7, 0.15:11,0.19:15,0.23:20,0.26:25,inf:30}
    
    pY = pozitivni(yesterDay)
    pW = pozitivni(now.replace(day=now.day-7))
    
    body = []
    
    allBreak = False
    oldBreak = False
    
    for p in pozitivitaDict:
        if pY[0] < p and not allBreak:
            body.append(pozitivitaDict[p])
            allBreak = True
        if pY[1] < p and not oldBreak:
            body.append(pozitivitaDict[p])
            oldBreak = True
        if oldBreak and allBreak:
            break
        
    if pY[1] > pW[1]:
        body.append(2)
        
    r = R(yesterDay)
    for p in rDict:
        if r < p:
            body.append(rDict[p])
            break
    
    t = pozitivitaTestu(yesterDay)
    for p in testyDict:
        if t < p:
            body.append(testyDict[p])
            break
    
    if t > pozitivitaTestu(now.replace(day=now.day-7)):
        body.append(2)
        
    print(body)
    return sum(body)

print(pozitivni(yesterDay), R(yesterDay), pozitivitaTestu(yesterDay))
print(time.time()-start)
print(index(now))
print(time.time()-start)