"""Version utils."""
from __future__ import annotations

from functools import lru_cache

from awesomeversion import (
    AwesomeVersion,
    AwesomeVersionException,
    AwesomeVersionStrategy,
)


@lru_cache(maxsize=1024)
def version_left_higher_then_right(left: str, right: str) -> bool | None:
    """Return a bool if source is newer than target, will also be true if identical."""
    try:
        left_version = AwesomeVersion(left)
        right_version = AwesomeVersion(right)
        if (
            left_version.strategy != AwesomeVersionStrategy.UNKNOWN
            and right_version.strategy != AwesomeVersionStrategy.UNKNOWN
        ):
            return left_version > right_version
    except (AwesomeVersionException, AttributeError):
        pass

    return None


def version_left_higher_or_equal_then_right(left: str, right: str) -> bool:
    """Return a bool if source is newer than target, will also be true if identical."""
    if left == right:
        return True

    return version_left_higher_then_right(left, right)
