"""
Sei que ainda pode melhorar!
Consegui reduzir o codigo mas, com boa leitura. Ficou assim:
"""

import pandas as pd
import unicodedata

def remover_acentos(texto):
    return (unicodedata.normalize('NFD', texto)
            .encode('ascii', 'ignore')
            .decode('utf-8')) if isinstance(texto, str) else texto

def limpar_dataframe(df):
    df = df.fillna("")
    df = df.astype({col: str for col in df.select_dtypes(include='int64')})
    df[df.select_dtypes(include='float').columns] = df.select_dtypes(include='float').round(2)
    df[df.select_dtypes(include='object').columns] = df.select_dtypes(include='object').applymap(remover_acentos)
    return df

def formatar_cabecalho(colunas, ignorar):
    return [remover_acentos(c).upper().replace(" ", "_").replace("/", "_")
            for i, c in enumerate(colunas) if i not in ignorar]

def converter_via_pandas(arq_csv, arq_xlsx):
    df = pd.read_excel(arq_xlsx, sheet_name='cClass', dtype={col: str for col in [
        "CST-IBS/CBS", "cClassTrib", "pRedIBS", "pRedCBS", 
        "ind_RedutorBC", "ind_gTribRegular", "ind_CredPres", 
        "indMono", "indMonoReten", "indMonoRet", "indMonoDif"
    ]})
    
    df = limpar_dataframe(df)
    ignorar_colunas = [0, 1, 4, 5]
    csv_cabec = formatar_cabecalho(df.columns, ignorar_colunas)
    csv_dados = []

    mapeamento = {"Fornecedor": "01", "Adquirente": "02"}

    for _, linha in df.iterrows():
        dados = []
        for i, dado in enumerate(linha):
            if i in ignorar_colunas:
                continue
            dado = str(dado).replace("\n", "")
            if i == 17:
                dado = next((v for k, v in mapeamento.items() if k in dado), "99")
            dados.append(dado)
        csv_dados.append(dados)

    with open(arq_csv, "w", encoding='utf-8') as f:
        f.write(";".join(csv_cabec) + "\n")
        for linha in csv_dados:
            f.write(";".join(linha) + "\n")

if __name__ == "__main__":
    csv_file = "./csv/rtc_cclasstrib_20250618.csv"
    xlsx_file = "./xlsx/CST_cClassTribPublicacao_20250618.xlsx"
    converter_via_pandas(csv_file, xlsx_file)
