from __future__ import annotations

import re
from decimal import ROUND_HALF_UP, Decimal
from typing import Any


def to_decimal(val: Any, default: Decimal = Decimal("0.0000")) -> Decimal:
    """Safe conversion to Decimal with 4 decimal places."""
    if val is None:
        return default
    if isinstance(val, (int, float)):
        return Decimal(str(val)).quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)
    if isinstance(val, str):
        cleaned = re.sub(r"[^\d.-]", "", val.strip())
        if not cleaned:
            return default
        try:
            return Decimal(cleaned).quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)
        except Exception:
            return default
    if isinstance(val, Decimal):
        return val.quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)
    return default
