use crate::{CivicTier, SovereignProfile};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LegacyProfile {
pub identity: f64,
pub reputation: f64,
pub community: f64,
pub engagement: f64,
}
impl LegacyProfile {
pub fn combined_score(&self) -> f64 {
let i = sanitize(self.identity);
let r = sanitize(self.reputation);
let c = sanitize(self.community);
let e = sanitize(self.engagement);
(i * 0.25 + r * 0.25 + c * 0.30 + e * 0.20).clamp(0.0, 1.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum LegacyTier {
Observer,
Participant,
Citizen,
Steward,
Guardian,
}
impl From<LegacyProfile> for SovereignProfile {
fn from(old: LegacyProfile) -> Self {
let i = sanitize(old.identity);
let r = sanitize(old.reputation);
let c = sanitize(old.community);
let e = sanitize(old.engagement);
Self {
epistemic_integrity: i,
thermodynamic_yield: e,
network_resilience: i,
economic_velocity: r,
civic_participation: c,
stewardship_care: r,
semantic_resonance: c,
domain_competence: e,
}
}
}
impl From<LegacyTier> for CivicTier {
fn from(old: LegacyTier) -> Self {
match old {
LegacyTier::Observer => CivicTier::Observer,
LegacyTier::Participant => CivicTier::Participant,
LegacyTier::Citizen => CivicTier::Citizen,
LegacyTier::Steward => CivicTier::Steward,
LegacyTier::Guardian => CivicTier::Guardian,
}
}
}
impl From<SovereignProfile> for LegacyProfile {
fn from(new: SovereignProfile) -> Self {
Self {
identity: (sanitize(new.epistemic_integrity) + sanitize(new.network_resilience)) / 2.0,
reputation: (sanitize(new.economic_velocity) + sanitize(new.stewardship_care)) / 2.0,
community: (sanitize(new.civic_participation) + sanitize(new.semantic_resonance)) / 2.0,
engagement: (sanitize(new.thermodynamic_yield) + sanitize(new.domain_competence)) / 2.0,
}
}
}
impl From<CivicTier> for LegacyTier {
fn from(new: CivicTier) -> Self {
match new {
CivicTier::Observer => LegacyTier::Observer,
CivicTier::Participant => LegacyTier::Participant,
CivicTier::Citizen => LegacyTier::Citizen,
CivicTier::Steward => LegacyTier::Steward,
CivicTier::Guardian => LegacyTier::Guardian,
}
}
}
fn sanitize(v: f64) -> f64 {
if v.is_finite() {
v.clamp(0.0, 1.0)
} else {
0.0
}
}