# app/src/core/numbers.py

from __future__ import annotations


def safe_float(
    value: object,
    default: float | None = None,
) -> float | None:
    if value is None:
        return default

    if isinstance(value, bool):
        return default

    try:
        return float(str(value).strip())
    except (TypeError, ValueError):
        return default


def safe_round(
    value: object,
    digits: int,
) -> float | None:
    """
    Безопасное округление.

    None -> None
    любое число -> round(...)
    """
    number = safe_float(value)

    if number is None:
        return None

    return round(number, digits)


def get_value(value: object) -> object | None:
    """
    Возвращает значение Enum или сам объект.

    Enum -> .value
    None -> None
    Остальные типы -> без изменений.
    """
    if value is None:
        return None

    return getattr(value, "value", value)