"""
Provide a mock binary sensor platform.

Call init before using it in your tests to ensure clean test data.
"""
from homeassistant.components.binary_sensor import DEVICE_CLASSES, BinarySensorDevice

from tests.common import MockEntity

ENTITIES = {}


def init(empty=False):
    """Initialize the platform with entities."""
    global ENTITIES

    ENTITIES = (
        {}
        if empty
        else {
            device_class: MockBinarySensor(
                name=f"{device_class} sensor",
                is_on=True,
                unique_id=f"unique_{device_class}",
                device_class=device_class,
            )
            for device_class in DEVICE_CLASSES
        }
    )


async def async_setup_platform(
    hass, config, async_add_entities_callback, discovery_info=None
):
    """Return mock entities."""
    async_add_entities_callback(list(ENTITIES.values()))


class MockBinarySensor(MockEntity, BinarySensorDevice):
    """Mock Binary Sensor class."""

    @property
    def is_on(self):
        """Return true if the binary sensor is on."""
        return self._handle("is_on")

    @property
    def device_class(self):
        """Return the class of this sensor."""
        return self._handle("device_class")
