import numpy as np
from tools import file_handler
from tools.heat_cp import *

def delta_H(T1,T2,komp = '',):
    #returnerer integral(Cp dt) fra T1 til T2 for komponenten 'komp'
    func = eval('Cp_' + komp)
    I = quad(func,T1,T2)

    return I[0]

def Hf_strom(strom_nr, gass = False):
    ########################################################
    # gjør klar lister over komponenter og fraksjoner

    hf_komp = [x for x in hf]   #lager en lokal liste av dannelsesentalpier
    hf_komp.append(hfsol)       #legger til dannelsesentalpi for MEA-løsning

    strom_dict = file_handler.file_to_dict('karsto.txt')

    #hvis det ikke er MEA i strommen er det en gasstrom
    if strom_dict['w' + str(strom_nr) + '_mea'] == 0:
        gass = True

    # liste over komponentene i strommen
    komp_list = ['co2', 'h2o', 'n2', 'o2', 'mea']

    #  liste over vektfraksjoner hentet fra strom_dict
    frac_list = np.array([strom_dict['w' + str(strom_nr) + '_' + komp] for komp in komp_list])

    if gass:
        #sånn at riktig Cp blir brukt
        komp_list[0] = 'co2g'

    temp_K = 273 + T[strom_nr-1] #T er nullindeksert og oppgitt i celcius
    ################################################################
    # regner ut entalpien til strømmen per masse
    m = strom_dict['m'+str(strom_nr)]
    H = m * sum(np.array(hf_komp) * frac_list)  # Hf_tot = sum(Hf_i * w_i)

    #hvis strommen ikke er gass, er co2 i strommen absorbert i mea
    if not gass:
        H += ((m * frac_list[0])/(Mw[0] * 0.001))*habs_m      #legger til absorbsjonsentalpien

    #legger til delta_H ved oppvarming av strommen fra 298 til T
    for komp,frac in zip(komp_list,frac_list):
        H += m *frac * delta_H(Tref_K, temp_K, komp=komp)
    return H

def get_heat_V4():
    varmeveksler_dict = file_handler.file_to_dict('varmeveksler_dict.txt')

    H5 = Hf_strom(5)
    H6 = Hf_strom(6)
    H9 = Hf_strom(9)
    V3 = varmeveksler_dict['V3']

    #      INN     =   UT
    # H5 + V3 + V4 = H9 + H6
    V4 = H6 + H9 - (H5 + V3)

    print(V4)

def gen_enthalpy_dict():
    enthalpyDict = {}

    for i in range(1,10):
        enthalpyDict['H' + str(i)] = Hf_strom(i)

    file_handler.dict_to_file('enthalpy_dict.txt', dataDict=enthalpyDict)

H1 = Hf_strom(1)
H2 = Hf_strom(2)
H3 = Hf_strom(3)
H4 = Hf_strom(4)
H5 = Hf_strom(5)
H6 = Hf_strom(6)
H7 = Hf_strom(7)
H9 = Hf_strom(9)

V_dict = file_handler.file_to_dict('varmeveksler_dict.txt')
V2, V3, V4 = V_dict['V2'],V_dict['V3'], V_dict['V4']

print(H5 + V3 + V4 -( H9 + H6))

get_heat_V4()