from pathlib import Path
import yaml
from settings import settings

from clickhouse_tools import ClickHouseClient
import utils
from postgres_tools import PostgresClient

# Загрузка конфигурации из файла config.yaml
with open('config.yaml', 'r') as config_file:
    config = yaml.safe_load(config_file)

MAIN_PATH = config['paths']['main']
main_path = Path(MAIN_PATH)


def add_data_to_db(experiment_parameters, load_parameters, recycling_parameters):

    geometry_path = (f"{experiment_parameters['outer_blades_count']}_{experiment_parameters['outer_blades_length']}_"
                     f"{experiment_parameters['outer_blades_angle']}_{experiment_parameters['middle_blades_count']}")
    experiments_path = main_path / geometry_path / 'experiments'
    load_path = experiments_path / str(experiment_parameters['load'])
    load_parameters_path = load_path / 'parameters'
    recycling_path = load_path / str(experiment_parameters['recycling'])
    load_parameters_file = load_parameters_path / f"load_{experiment_parameters['load']}_parameters.yaml"
    plot_csv = recycling_path / 'plot.csv'
    table_csv = recycling_path / 'data_table.csv'

    file_id = utils.calculate_hash(experiment_parameters)

    clickhouse_client = ClickHouseClient("localhost", 8123, settings.DATABASE, settings.CLICKHOUSE_USER, settings.CLICKHOUSE_PASSWORD)

    # Инициализация базы данных
    db = PostgresClient(
        dbname=settings.DATABASE,
        user=settings.POSTGRES_USER,
        password=settings.POSTGRES_PASSWORD,
        host="localhost",
        port="5432"
    )

    try:

        if load_parameters_file.exists():
            with open(load_parameters_file, 'r') as fuel_dict_file:
                fuel_parameters = yaml.safe_load(fuel_dict_file)
                load_parameters['primary_air_consumption'] = fuel_parameters['primary_air_consumption']
                load_parameters['secondary_air_consumption'] = fuel_parameters['secondary_air_consumption']
                load_parameters['gas_inlet_consumption'] = fuel_parameters['gas_inlet_consumption']

        # Вставка данных в load_parameters и получение id
        load_id = db.insert_load_parameters(load_parameters)

        # Вставка данных в recycling_parameters и получение id
        recycling_id = db.insert_recycling_parameters(recycling_parameters, load_id)

        # Вставка данных в experiment_parameters
        db.insert_experiment_parameters(experiment_parameters, load_id, recycling_id, file_id)

        # Сохранение изменений
        db.connection.commit()

        db.save_csv_to_postgres(plot_csv, file_id)

        clickhouse_client.save_csv_to_clickhouse(table_csv, file_id)

        print('Загружено: ', experiment_parameters)

    finally:
        db.close()