import pandas as pd
import numpy as np
import json
import os
from pathlib import Path
from scipy.signal import savgol_filter

# --- COEFICIENTES DE CALIBRAÇÃO (Ajuste com seus valores do terminal) ---
M_COEFF = 0.012345
B_COEFF = 0.123456

BASE_DIR = Path(__file__).parent

# Lista exata das pastas conforme sua árvore
PASTAS_MAE = [
    "Amata- teste",
    "Campo Alto",
    "FRP Campo Novo Proc. Alamos",
    "FRP Campo Novo Proc. FRP",
    "FRP Cerro Verde Proc. Alamos",
    "FRP Cerro Verde Proc. FRP",
    "Gateados"
]

def processar_sinal_rgp(caminho):
    """Extrai média SG e DB estimada."""
    try:
        with open(caminho, 'r', encoding='utf-8') as f:
            dados = json.load(f)
        drill = np.array(dados['profile']['drill'])
        # Filtro Savitzky-Golay (Janela 31, Ordem 3)
        filtrado = savgol_filter(drill, 31, 3)
        rp_med = np.mean(filtrado)
        db_est = (M_COEFF * rp_med) + B_COEFF
        return round(rp_med, 4), round(db_est, 4)
    except:
        return None, None

print(" iniciou o processamento das unidades...")

for nome_pasta in PASTAS_MAE:
    caminho_mae = BASE_DIR / nome_pasta

    if not caminho_mae.exists():
        print(f"⚠️ Pasta '{nome_pasta}' não encontrada. Verifique o nome/espaços.")
        continue

    dados_da_unidade = []

    # Busca manual para evitar problemas de case-sensitivity no Linux
    for raiz, diretorios, arquivos in os.walk(caminho_mae):
        for arquivo in arquivos:
            if arquivo.lower().endswith(".rgp"):
                caminho_completo = Path(raiz) / arquivo
                rp, db = processar_sinal_rgp(caminho_completo)

                if rp is not None:
                    dados_da_unidade.append({
                        "Arquivo": arquivo,
                        "Bloco": caminho_completo.parent.name,
                        "RP_Media_SG": rp,
                        "DB_Estimada": db
                    })

    if dados_da_unidade:
        df = pd.DataFrame(dados_da_unidade)
        # Organiza por bloco e nome de arquivo (ex: Measurement001, 002...)
        df = df.sort_values(by=["Bloco", "Arquivo"])

        # Nome do arquivo de saída limpo
        nome_saida = f"RPmed_{nome_pasta.replace(' ', '_')}.xlsx"
        df.to_excel(BASE_DIR / nome_saida, index=False)
        print(f"✅ {nome_pasta}: {len(df)} arquivos processados -> {nome_saida}")
    else:
        print(f"❌ {nome_pasta}: Nenhum arquivo .rgp encontrado nos blocos.")

print("\nConcluído. Verifique os arquivos RPmed na pasta raiz.")
