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

# --- CONFIGURAÇÕES DE CAMINHOS ---
BASE_DIR = Path(__file__).parent / "Gateados 2025"
PASTA_AMOSTRA = BASE_DIR / "Amostra"
# Certifique-se de que o nome do arquivo Excel está correto na sua pasta
ARQUIVO_LAB = BASE_DIR / "BAGUETAS GATEADOS  densidade.xlsx"
OUTPUT_EXCEL = BASE_DIR / "DB_estimada_adaptativa_estatico.xlsx"

# Coeficientes de Calibração (Ajuste conforme seus valores validados)
M_COEFF = 0.012345
B_COEFF = 0.123456

def metodo_estatico(y):
    """Corte fixo de 5 pontos (Hard-coded)."""
    if len(y) <= 10: return None
    y_corte = y[5:-5]
    filtrado = savgol_filter(y_corte, 31, 3)
    return np.mean(filtrado)

def metodo_adaptativo(y, window=20):
    """Corte dinâmico baseado em 15% da força máxima e estabilidade."""
    if len(y) < window * 2: return None

    max_res = np.percentile(y, 98)
    threshold = max_res * 0.15

    # Busca início
    inicio = 0
    for i in range(len(y) - window):
        if np.mean(y[i:i+window]) > threshold:
            inicio = i
            break

    # Busca fim
    fim = len(y)
    for i in range(len(y) - 1, window, -1):
        if np.mean(y[i-window:i]) > threshold:
            fim = i
            break

    y_corte = y[inicio:fim]
    if len(y_corte) < 31: return None

    filtrado = savgol_filter(y_corte, 31, 3)
    return np.mean(filtrado)

# 1. Carregar Dados de Lab
print("📊 Carregando dados de laboratório...")
abas = pd.read_excel(ARQUIVO_LAB, sheet_name=None)
df_lab = pd.concat(abas.values(), ignore_index=True)
df_lab['Registro'] = pd.to_numeric(df_lab['Registro'], errors='coerce')
df_lab = df_lab.dropna(subset=['Registro', 'ME.Bas'])

# 2. Processar Amostras
resultados = []

print("⚙️ Processando arquivos .rgp pelos dois métodos...")
for reg in df_lab['Registro']:
    nome_arq = f"Measurement{str(int(reg)).zfill(3)}.rgp"
    caminho = PASTA_AMOSTRA / nome_arq

    if caminho.exists():
        with open(caminho, 'r') as f:
            dados = json.load(f)
        y_bruto = np.array(dados['profile']['drill'])

        rp_estatico = metodo_estatico(y_bruto)
        rp_adaptativo = metodo_adaptativo(y_bruto)

        if rp_estatico and rp_adaptativo:
            resultados.append({
                "Registro": reg,
                "ME_Bas_Lab": df_lab.loc[df_lab['Registro'] == reg, 'ME.Bas'].values[0],
                "RP_Estatica": round(rp_estatico, 4),
                "RP_Adaptativa": round(rp_adaptativo, 4),
                "DB_Est_Estatica": round((M_COEFF * rp_estatico) + B_COEFF, 4),
                "DB_Est_Adaptativa": round((M_COEFF * rp_adaptativo) + B_COEFF, 4)
            })

# 3. Salvar e Comparar
df_comp = pd.DataFrame(resultados)
df_comp.to_excel(OUTPUT_EXCEL, index=False)

print("\n" + "="*40)
print(f"✅ Arquivo gerado: {OUTPUT_EXCEL.name}")
print(f"Amostras processadas: {len(df_comp)}")
print(f"Diferença média de RP: {round(df_comp['RP_Adaptativa'].mean() - df_comp['RP_Estatica'].mean(), 4)}")
print("="*40)
