agora, com esse

#* data_processing (geral)
# ===== IMPORTA MÓDULOS =====
from utils import adiciona_log
import pandas as pd
import re, csv
import os


# ===== FUNÇÃO DE FORMATAÇÕES GERAIS =====
def formatacoes_geral(csv_entrada: str) -> pd.DataFrame:
    #* Lê um arquivo CSV/TXT com formatação inconsistente e retorna um DataFrame a partir da primeira linha válida.
    #* Essa linha válida é aquela que possui mais de 6 colunas separadas por tabulação.

    #* Verifica se o arquivo existe
    if not os.path.exists(csv_entrada):
        mensagem = f"Arquivo não encontrado: {csv_entrada}"
        adiciona_log("erro", mensagem)
        raise FileNotFoundError(mensagem)

    try:
        #* Lê todas as linhas do arquivo
        with open(csv_entrada, "r", encoding="ISO-8859-1") as arquivo_txt:
            linhas_arquivo = arquivo_txt.readlines()

        if not linhas_arquivo:
            mensagem = "O arquivo está vazio."
            adiciona_log("erro", mensagem)
            raise ValueError(mensagem)

        #* Procura a primeira linha com mais de 6 colunas (tabuladas)
        index_linha_inicial = next(
            (
                i
                for i, linha in enumerate(linhas_arquivo)
                if len([coluna for coluna in re.split(r"\t", linha.strip()) if coluna]) > 6
            ),
            None,
        )

        if index_linha_inicial is None:
            mensagem = "Nenhuma linha com mais de 6 colunas foi encontrada. Verifique o formato do arquivo."
            adiciona_log("erro", mensagem)
            raise ValueError(mensagem)

        #* Lê os dados a partir da linha válida encontrada
        data_frame = pd.read_csv(
            csv_entrada,
            engine="python",
            skiprows=index_linha_inicial,
            encoding="ISO-8859-1",
            sep=None,
            quoting=csv.QUOTE_NONE,
            quotechar='"'
        )

        return data_frame

    except pd.errors.ParserError as e:
        mensagem = f"Erro ao analisar o arquivo CSV: {str(e)}"
        adiciona_log("erro", mensagem)
        raise ValueError(mensagem)

    except UnicodeDecodeError as e:
        mensagem = f"Erro de codificação ao ler o arquivo: {str(e)}"
        adiciona_log("erro", mensagem)
        raise ValueError(mensagem)

    except Exception as e:
        mensagem = f"Erro inesperado: {str(e)}"
        adiciona_log("erro", mensagem)
        raise RuntimeError(mensagem)


# ===== FUNÇÃO DE APENAS LEITURA GERAL =====
def apenas_leitura_arquivos(arquivo_leitura, nome_planilha=None):
    try:
        #-- LÊ CSV OU TXT --
        if arquivo_leitura.lower().endswith(('.csv', '.txt')):
            return pd.read_csv(
                arquivo_leitura,
                engine="python",
                encoding="utf-8",
                quotechar='"'
            )

        # -- LÊ TIPO EXCEL --
        elif arquivo_leitura.lower().endswith(('.xlsx', '.xlsm')):
            if nome_planilha:
                return pd.read_excel(
                    arquivo_leitura,
                    sheet_name=nome_planilha
                )
            else:
                planilhas = pd.read_excel(arquivo_leitura, sheet_name=None)
                primeira_planilha = list(planilhas.keys())[0]
                return planilhas[primeira_planilha]
        
        # -- LÊ TIPO PARQUET --
        elif arquivo_leitura.lower().endswith(('.parquet')):
            return pd.read_parquet(
                arquivo_leitura, 
                engine='pyarrow'
            )

        else:
            adiciona_log("erro", f"Formato não suportado de arquivo: {str(e)}")
            raise ValueError("Formato de arquivo não suportado. Use .csv, .txt, .xlsm ou .xlsx")

    except Exception as e:
        adiciona_log("erro", f"Erro ao ler arquivo: {str(e)}")
        return pd.DataFrame()