"""
Utility functions for safe value validation and conversion.
"""

import math
from typing import Optional, Union, Any


def safe_float(value: Any, default: Optional[float] = None) -> Optional[float]:
    """
    Converte valore a float in modo sicuro, gestendo None, NaN e infiniti.
    
    Args:
        value: Valore da convertire (può essere None, stringa, numero, etc.)
        default: Valore di default da ritornare se conversione fallisce
        
    Returns:
        float o default se conversione fallisce o valore è None/NaN/Inf
        
    Examples:
        >>> safe_float("123.45")
        123.45
        >>> safe_float(None)
        None
        >>> safe_float("invalid")
        None
        >>> safe_float(float('nan'))
        None
        >>> safe_float(float('inf'))
        None
    """
    if value is None:
        return default
    
    try:
        f = float(value)
        if math.isnan(f) or math.isinf(f):
            return default
        return f
    except (TypeError, ValueError):
        return default
