import numpy as np
import json
import matplotlib.pyplot as plt
from pathlib import Path
from scipy.signal import savgol_filter, find_peaks

# --- CONFIGURAÇÕES DE CAMINHOS ---
BASE_DIR = Path(__file__).parent / "Gateados 2025"
PASTA_AMOSTRAS = BASE_DIR / "Amostra"

# --- ESCOLHA O EXAME ---
REGISTRO_PARA_PLOTAR = 17

def plotar_perfil_final(registro):
    nome_arq = f"Measurement{str(int(registro)).zfill(3)}.rgp"
    caminho = PASTA_AMOSTRAS / nome_arq

    if not caminho.exists():
        print(f"Erro: Arquivo {nome_arq} não encontrado.")
        return

    with open(caminho, 'r', encoding='utf-8') as f:
        dados = json.load(f)

    drill = np.array(dados['profile']['drill'])
    x = np.arange(len(drill))

    # Parâmetros SG
    w_suave, w_deriv = 51, 101
    drill_sg = savgol_filter(drill, window_length=w_suave, polyorder=3)
    delta_rp = savgol_filter(drill, window_length=w_deriv, polyorder=3, deriv=1)

    # Margem de Segurança
    margem = max(w_suave, w_deriv) // 2
    x_l = x[margem:-margem]
    bruto_l = drill[margem:-margem]
    suave_l = drill_sg[margem:-margem]
    delta_l = delta_rp[margem:-margem]

    # --- DETECÇÃO DE PICOS (X) ---
    indices_picos, _ = find_peaks(delta_l, distance=100, prominence=0.2)
    total_x = len(indices_picos)

    # Zonas Adaptativas
    r_min, r_max = suave_l.min(), suave_l.max()
    intervalo = r_max - r_min
    z1, z2 = r_min + (intervalo * 0.33), r_min + (intervalo * 0.66)

    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16, 12), sharex=True)

    # --- GRÁFICO 1: PERFIL DE RESISTÊNCIA ---
    # RESTAURADO: As labels voltaram para o axhspan
    ax1.axhspan(z2, r_max, color='green', alpha=0.06, label='Zona Alta Densidade')
    ax1.axhspan(z1, z2, color='yellow', alpha=0.06, label='Zona Média')
    ax1.axhspan(r_min, z1, color='red', alpha=0.06, label='Zona Baixa Densidade')

    ax1.plot(x_l, bruto_l, color='gray', alpha=0.15, linewidth=0.5, label='Leitura Bruta')
    ax1.plot(x_l, suave_l, color='#1a252f', linewidth=2, label='Perfil Suavizado (SG)')

    ax1.set_title(f'Perfil Longitudinal de Resistência - Amostra {registro}', fontsize=14, fontweight='bold')
    ax1.set_ylabel('Resistência à Perfuração (RP)')
    ax1.grid(True, which='both', linestyle='--', alpha=0.3)

    ax1.legend(loc='upper right')



    # --- GRÁFICO 2: VARIAÇÃO DE RESISTÊNCIA (ANÉIS DE CRESCIMENTO) ---
    ax2.fill_between(x_l, 0, delta_l, where=(delta_l >= 0), color='#27ae60', alpha=0.4, label='Início LT')
    ax2.fill_between(x_l, 0, delta_l, where=(delta_l < 0), color='#c0392b', alpha=0.4, label='Início LI')

    ax2.scatter(x_l[indices_picos], delta_l[indices_picos], color='red', marker='x', s=80,
                label=f'Picos de Transição ({total_x})')

    ax2.plot(x_l, delta_l, color='black', linewidth=0.8, alpha=0.4)

    ax2.set_title('Variação de Resistência (Anéis de Crescimento)', fontsize=12)
    ax2.set_xlabel('Profundidade da Perfuração (Pontos)')
    ax2.set_ylabel('ΔRP')

    ax2.axhline(0, color='black', linewidth=1.2)
    ax2.grid(True, alpha=0.3)

    ax2.legend(loc='upper right')



    plt.tight_layout()
    print(f"Processamento concluído. {total_x} pontos de transição marcados.")
    plt.show()

if __name__ == "__main__":
    plotar_perfil_final(REGISTRO_PARA_PLOTAR)
