from tools.global_constants import *
from tools.ping_pong_constants import *

def vinkelfart(t_list, theta_list, usikker = False, glatt = 15):
    vf_list = [0]
    delta_theta = []
    delta_t = []
    
    if usikker:
        for i in range(len(t_list) - glatt):
            vf = (theta_list[i + glatt] - theta_list[i]) / (t_list[i + glatt] - t_list[i])

            vf_list.append(vf)
            delta_theta.append(theta_list[i+glatt]-theta_list[i])
            delta_t.append(t_list[i+glatt]-t_list[i])

        vf_list.extend([vf_list[-1] for x in range(glatt-1)])
        delta_theta.extend([delta_theta[-1] for i in range(glatt)])
        delta_t.extend([delta_t[-1] for i in range(glatt)])

        return vf_list,delta_theta,delta_t

    else:
        for i in range(len(t_list)-glatt):
            vf = (theta_list[i+glatt]-theta_list[i]) / (t_list[i+glatt]-t_list[i])
            vf_list.append(vf)
    
    vf_list.extend([vf_list[-1] for x in range(glatt-1)])

    return vf_list

def vinkelakselerasjon(t_list, theta_list, usikker = False, glatt = 30):
    fart_list = vinkelfart(t_list, theta_list)
    startverdi = (-g*np.sin(theta_list[0]))/(R*(1+c)) # startverdi for vinkelakselerasjon beregnet fra theta i starttidspunkt

    aks_list = [startverdi]

    delta_vf = []
    delta_t = []

    if usikker:
        print('len(t_list) : ', len(t_list))
        for i in range(len(t_list) - glatt):
            aks = (fart_list[i + glatt] - fart_list[i]) / (t_list[i + glatt] - t_list[i])

            aks_list.append(aks)
            delta_vf.append(fart_list[i + glatt] - fart_list[i])
            delta_t.append(t_list[i + glatt] - t_list[i])

        aks_list.extend([aks_list[-1] for x in range(glatt - 1)])
        delta_vf.extend([delta_vf[-1] for i in range(glatt)])
        delta_t.extend([delta_t[-1] for i in range(glatt)])

        return aks_list, delta_vf, delta_t
    else:
        for i in range(len(fart_list)-glatt): # Hopper over målinger for å få glattet ut kurven og fjernet de håpløse resultatene våre :)
            aks = (fart_list[i+glatt]-fart_list[i])/(t_list[i+glatt]-t_list[i])
            aks_list.append(aks)
        aks_list.extend([0 for j in range(glatt-1)]) #Vil at listen skal være like lang som de andre listene for plottingen.
    return aks_list                         # legger derfor til like mange 0'er som vi mister når vi gjør hopp i målingene.

def luftmotstand(t_list, theta_list):
    aks_list = vinkelakselerasjon(t_list,theta_list)
    luft_list = []

    for i in range(len(theta_list)):
        l = m*g*np.sin(theta_list[i]) + R*aks_list[i]*m + c * m * R * aks_list[i]
        luft_list.append(l)

    return luft_list
