import pandas as pd
import numpy as np
from pathlib import Path
ROOT=Path(__file__).resolve().parents[1]
metrics=pd.read_csv(ROOT/'data/processed/interface_cycle_metrics.csv')
criteria=['f95_normal_N','frms_normal_N','impulse_normal_Ns','tangential_abs_p95_N','max_loading_rate_N_s','time_above_45N_pct']
agg=metrics.groupby(['virtual_model_id','scenario_id','interface_code'],as_index=False)[criteria].mean()
X=agg[criteria].to_numpy(float)
mins=X.min(0); maxs=X.max(0)
Z=(X-mins)/(maxs-mins)
sigma=Z.std(0,ddof=1); R=np.corrcoef(Z,rowvar=False)
C=sigma*np.sum(1-R,axis=1); w=C/C.sum()
V=Z*w; A=V.max(0); M=V.min(0)
DA=np.sqrt(((V-A)**2).sum(1)); DM=np.sqrt(((V-M)**2).sum(1))
agg['imeb_exo']=DM/(DA+DM)
agg['ccb_exo_class']=np.select([agg.imeb_exo<0.2,agg.imeb_exo<0.4,agg.imeb_exo<0.6,agg.imeb_exo<0.8],[1,2,3,4],default=5)
print('CRITIC weights')
print(pd.Series(w,index=criteria))
print('\nInterface summary')
print(agg.groupby('interface_code').imeb_exo.agg(['mean','std','median']).sort_values('mean',ascending=False))
