# calculotermica/utils.py
import numpy as np
from .cargastermicos import (
    calcular_cargas_termicas_ambiente,
    calcular_calor_sensivel_ar_exterior,
    calcular_calor_latente_ar_exterior,
    calcular_vazao_total_ar_exterior,
    calcular_densidade_ar
)
from .cargasparedes import carregar_temperaturas_projeto2

def calcular_carga_termica_ambiente(ambiente, termicos):
    """Calcula a carga térmica total horária de um ambiente, incluindo carga sensível e latente."""
    temperaturas_externas, umidade_absoluta_externa, calor_latente_agua = carregar_temperaturas_projeto2(ambiente.projeto.id)
    densidade_ar = calcular_densidade_ar(ambiente.projeto.altitude or 0)
    horarios = ["06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00"]

    # Cálculos de vazões e calor sensível e latente do ar exterior
    vazao_total_ar_exterior = calcular_vazao_total_ar_exterior(
        termicos.area_piso, termicos.pe_direito, termicos.numero_pessoas, termicos.taxa_renovacao
    )
    calor_sensivel_ar_exterior = calcular_calor_sensivel_ar_exterior(
        termicos, temperaturas_externas, termicos.temperatura_interna, vazao_total_ar_exterior
    )
    calor_latente_ar_exterior = calcular_calor_latente_ar_exterior(
        densidade_ar, vazao_total_ar_exterior, umidade_absoluta_externa, termicos.umidade_absoluta_interna
    )

    # Calcular as cargas térmicas do ambiente
    cargas_ambiente = calcular_cargas_termicas_ambiente(termicos)

    # Inicializar totalizadores
    carga_sensivel_total = cargas_ambiente.get('carga_sensivel_total', np.zeros(len(horarios)))
    carga_latente_total = cargas_ambiente.get('carga_latente_total', np.zeros(len(horarios)))

    # Somar as cargas sensíveis e latentes totais
    somatorio_carga_sensivel_total = carga_sensivel_total + calor_sensivel_ar_exterior
    somatorio_carga_latente_total = carga_latente_total + calor_latente_ar_exterior
    carga_termica_total_ambiente = somatorio_carga_sensivel_total + somatorio_carga_latente_total

    print(f"Carga térmica total para {ambiente.nome_ambiente}: {carga_termica_total_ambiente}")
    return carga_termica_total_ambiente
