use crate::types::validation_errors::ValidationError;
use serde::{Deserialize, Serialize};

/// Nível de risco do cliente
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum RiskLevel {
    Low,
    Medium,
    High,
}

/// Score de risco (0.0 a 1.0)
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub struct RiskScore(f64);

impl RiskScore {
    /// Cria um novo score de risco
    ///
    /// # Erros
    ///
    /// Retorna erro se o score não estiver entre 0.0 e 1.0
    pub fn new(score: f64) -> Result<Self, ValidationError> {
        if !(0.0..=1.0).contains(&score) {
            return Err(ValidationError::OutOfRange {
                field: "risk_score".to_string(),
                min: 0.0,
                max: 1.0,
                actual: score,
            });
        }
        Ok(Self(score))
    }

    pub fn value(&self) -> f64 {
        self.0
    }
}
