"""Common helper and classes for number entity tests."""

from homeassistant.components.number import NumberEntity, RestoreNumber

from tests.common import MockEntity


class MockNumberEntity(MockEntity, NumberEntity):
    """Mock number class."""

    @property
    def native_max_value(self):
        """Return the native native_max_value."""
        return self._handle("native_max_value")

    @property
    def native_min_value(self):
        """Return the native native_min_value."""
        return self._handle("native_min_value")

    @property
    def native_step(self):
        """Return the native native_step."""
        return self._handle("native_step")

    @property
    def native_unit_of_measurement(self):
        """Return the native unit_of_measurement."""
        return self._handle("native_unit_of_measurement")

    @property
    def native_value(self):
        """Return the native value of this number."""
        return self._handle("native_value")

    def set_native_value(self, value: float) -> None:
        """Change the selected option."""
        self._values["native_value"] = value


class MockRestoreNumber(MockNumberEntity, RestoreNumber):
    """Mock RestoreNumber class."""

    async def async_added_to_hass(self) -> None:
        """Restore native_*."""
        await super().async_added_to_hass()
        if (last_number_data := await self.async_get_last_number_data()) is None:
            return
        self._values["native_max_value"] = last_number_data.native_max_value
        self._values["native_min_value"] = last_number_data.native_min_value
        self._values["native_step"] = last_number_data.native_step
        self._values["native_unit_of_measurement"] = (
            last_number_data.native_unit_of_measurement
        )
        self._values["native_value"] = last_number_data.native_value