import numpy as np
import scipy.optimize as opt
from tools import file_handler

def henry_constant(T, a):
    from constants0 import Hc
    Henry = (Hc[0] + (Hc[1] * a * (1/T)))*np.exp((Hc[2] * a**2) + Hc[3] * (1/T) + Hc[4] * a * (1/T**2))
    return Henry

def regress_K2():
    #bruker scipy.optimize.curve_fit for å tilpasse en funksjon til dataen gitt for K2
    # sånn at vi kan hente ut K2 verdier for temperaturer mellom de gitte temperaturene

    def exp_func(t, a, b):
        #exponensialfunksjonen
        return a * np.exp(b * t)

    with open('data_files/K2(T).txt','r') as file: #Henter ut data fra fil
        lines = file.readlines()
        T_data , K_data = [[None for x in lines] for i in range(2)]
        for i in range(len(lines)):
            T_data[i], K_data[i] = [float(x) for x in lines[i].split()]

    # curve_fit(func, x, y, p0) tar inn en funksjon og punktene (x,y)
    # p0 er en valgfri parameter for gjettninger
    # den returnerer de koeffisientene som gjør at den gitte funksjonen
    # approksimerer de gitte punktene best mulig.
    # ser at datapunktene følger en exp. kurve, med a >> 0 og b < 0
    coeff, pcov = opt.curve_fit(exp_func,T_data,K_data, p0=[1e10, -0.1])

    #Skriver coeffisientene til en fil for senere bruk
    file_handler.list_to_file('K2(T)_coeff.txt', coeff)

def K2(t):
    #henter ut koeffisienter fra filen generert av regress_K2()
    coeff = file_handler.file_to_list('K2(T)_coeff.txt')
    coeff = np.array(coeff)

    # exponensialfunksjon tilpasset dataen
    fit_K = lambda t: coeff[0] * np.exp(coeff[1] * t)

    return fit_K(t)