import pandas as pd
import json
import numpy as np

# --- 1. DEFINIÇÃO DOS PERFIS DE PESO (w_i) ---
PERFIS_PESO = {
    "Original": {"id": 3.0, "tax": 2.0, "str": 1.5, "des": 1.0},
    "Flat":     {"id": 1.0, "tax": 1.0, "str": 1.0, "des": 1.0},
    "Tax-Focus": {"id": 1.0, "tax": 5.0, "str": 1.0, "des": 1.0}
}

def calcular_lw(perfil, unidades_preservadas):
    """Calcula Lw baseado em um dicionário de pesos e unidades mantidas"""
    # Unidades de origem (todas)
    soma_src = sum(perfil.values())
    
    # Unidades preservadas (target)
    soma_tgt = 0
    if "id" in unidades_preservadas: soma_tgt += perfil["id"]
    if "tax" in unidades_preservadas: soma_tgt += perfil["tax"]
    if "str" in unidades_preservadas: soma_tgt += perfil["str"]
    if "des" in unidades_preservadas: soma_tgt += perfil["des"]
    
    return (1 - (soma_tgt / soma_src)) * 100

# --- 2. EXECUÇÃO DA SENSIBILIDADE ---
resultados_sensibilidade = []

# Simulando auditoria para os 150 registros
for i in range(1, 151):
    if i <= 50:
        fonte, cenario = "UFSCar", "Cenário A"
        mantidas = ["id", "str", "des"] # UFSCar preserva quase tudo exceto Taxonomia
    elif i <= 100:
        fonte, cenario = "Embrapa", "Padrão Interno"
        mantidas = ["id", "tax", "str", "des"] # Embrapa preserva tudo
    else:
        fonte, cenario = "GBIF", "Cenário B"
        mantidas = ["id", "des"] # Cenário B (Flat) perde Taxonomia e Estrutura

    # Para cada registro, calculamos o Lw nos 3 perfis
    row = {"ID": i, "Fonte": fonte, "Cenário": cenario}
    for nome_perfil, pesos in PERFIS_PESO.items():
        row[f"Lw_{nome_perfil} (%)"] = round(calcular_lw(pesos, mantidas), 2)
    
    resultados_sensibilidade.append(row)

# --- 3. SALVAMENTO ---
df_sens = pd.DataFrame(resultados_sensibilidade)
df_sens.to_csv("sensibilidade_resultados_150.csv", sep=';', index=False)

# Resumo para discussão
print("📊 Médias de Sensibilidade por Perfil:")
print(df_sens.groupby(['Fonte', 'Cenário'])[[f"Lw_{p} (%)" for p in PERFIS_PESO.keys()]].mean())