"""The tests for the demo light component."""
import pytest

from homeassistant.setup import async_setup_component
from homeassistant.components import light

from tests.components.light import common

ENTITY_LIGHT = 'light.bed_light'


@pytest.fixture(autouse=True)
def setup_comp(hass):
    """Set up demo component."""
    hass.loop.run_until_complete(async_setup_component(hass, light.DOMAIN, {
        'light': {
            'platform': 'demo',
        }}))


async def test_state_attributes(hass):
    """Test light state attributes."""
    common.async_turn_on(
        hass, ENTITY_LIGHT, xy_color=(.4, .4), brightness=25)
    await hass.async_block_till_done()
    state = hass.states.get(ENTITY_LIGHT)
    assert light.is_on(hass, ENTITY_LIGHT)
    assert (0.4, 0.4) == state.attributes.get(light.ATTR_XY_COLOR)
    assert 25 == state.attributes.get(light.ATTR_BRIGHTNESS)
    assert (255, 234, 164) == state.attributes.get(light.ATTR_RGB_COLOR)
    assert 'rainbow' == state.attributes.get(light.ATTR_EFFECT)
    common.async_turn_on(
        hass, ENTITY_LIGHT, rgb_color=(251, 253, 255),
        white_value=254)
    await hass.async_block_till_done()
    state = hass.states.get(ENTITY_LIGHT)
    assert 254 == state.attributes.get(light.ATTR_WHITE_VALUE)
    assert (250, 252, 255) == state.attributes.get(light.ATTR_RGB_COLOR)
    assert (0.319, 0.326) == state.attributes.get(light.ATTR_XY_COLOR)
    common.async_turn_on(hass, ENTITY_LIGHT, color_temp=400, effect='none')
    await hass.async_block_till_done()
    state = hass.states.get(ENTITY_LIGHT)
    assert 400 == state.attributes.get(light.ATTR_COLOR_TEMP)
    assert 153 == state.attributes.get(light.ATTR_MIN_MIREDS)
    assert 500 == state.attributes.get(light.ATTR_MAX_MIREDS)
    assert 'none' == state.attributes.get(light.ATTR_EFFECT)
    common.async_turn_on(hass, ENTITY_LIGHT, kelvin=3000, brightness_pct=50)
    await hass.async_block_till_done()
    state = hass.states.get(ENTITY_LIGHT)
    assert 333 == state.attributes.get(light.ATTR_COLOR_TEMP)
    assert 127 == state.attributes.get(light.ATTR_BRIGHTNESS)


async def test_turn_off(hass):
    """Test light turn off method."""
    await hass.services.async_call('light', 'turn_on', {
        'entity_id': ENTITY_LIGHT
    }, blocking=True)

    assert light.is_on(hass, ENTITY_LIGHT)

    await hass.services.async_call('light', 'turn_off', {
        'entity_id': ENTITY_LIGHT
    }, blocking=True)

    assert not light.is_on(hass, ENTITY_LIGHT)


async def test_turn_off_without_entity_id(hass):
    """Test light turn off all lights."""
    await hass.services.async_call('light', 'turn_on', {
    }, blocking=True)

    assert light.is_on(hass, ENTITY_LIGHT)

    await hass.services.async_call('light', 'turn_off', {
    }, blocking=True)

    assert not light.is_on(hass, ENTITY_LIGHT)