import os

from alei_utils import adapt_logger
import logging
from utils.concat_utils import concatenate_parquet_files, take_files_from_path, delete_duplicate_rows
import timeit

if "LOGGING_LEVEL" in os.environ:
    logging.basicConfig(level=os.getenv("LOGGING_LEVEL", default="DEBUG"))
logger = logging.getLogger(__name__)

adapter = adapt_logger(logger, {
    "servico": "IJ",
    "modulo": "IJ_CONCATENADOR_MAIN"
    })

def concatenate_all_from_path(path_in,path_out = None, file_name = None):
    '''
    Concatena todos os arquivos parquet de um determinado path
    :param path_in: path de entrada
    :param path_out: path de saida
    :param file_name: nome do arquivo de saida
    :return: dataframe concatenado
    '''
    try:
        parquet_files = take_files_from_path(path_in)
        inicio = timeit.default_timer()
        df = delete_duplicate_rows(concatenate_parquet_files(parquet_files))
        fim = timeit.default_timer()
        tempo = fim-inicio
        adapter.debug(
            f"tempo da concatenacao: {round(round(tempo,2)/60,2)} minutos",
            evento_status="E_S",
            tag_evento="TEMPO DE EXECUCAO"
        )
        adapter.info(
            "concatenacao finalizada",
            evento_status="E_S",
            tag_evento="CONCATECAO FINALIZADA"
        )
        adapter.debug(
            "concatenacao finalizada",
            evento_status="E_S",
            tag_evento="CONCATECAO FINALIZADA"
        )
        if path_out is not None and file_name is not None:
            df.to_parquet(path_out + '/' + file_name, index=False)
        return df
    except Exception as erro:
        adapter.error(
            f"Erro ao concatenar os arquivos: {erro}",
            evento_status="E_E",
            tag_evento="CONCATECAO ENCERRADA COM ERRO"
        )

def concatenate_files(files):
    try:
        inicio = timeit.default_timer()
        df = concatenate_parquet_files(files)
        fim = timeit.default_timer()
        tempo = fim-inicio
        adapter.debug(
            f"tempo da concatenacao: {round(round(tempo,2)/60,2)} minutos",
            evento_status="E_S",
            tag_evento="TEMPO DE EXECUCAO"
        )
        adapter.info(
            "concatenacao finalizada",
            evento_status="E_S",
            tag_evento="CONCATECAO FINALIZADA"
        )
        adapter.debug(
            "concatenacao finalizada",
            evento_status="E_S",
            tag_evento="CONCATECAO FINALIZADA"
        )
        return df
    except Exception as erro:
        adapter.error(
            f"Erro ao concatenar os arquivos: {erro}",
            evento_status="E_E",
            tag_evento="CONCATECAO ENCERRADA COM ERRO"
        )
