"""The tests for the Light Switch platform."""

from homeassistant.setup import async_setup_component
from tests.components.light import common
from tests.components.switch import common as switch_common


async def test_default_state(hass):
    """Test light switch default state."""
    await async_setup_component(hass, 'light', {'light': {
        'platform': 'switch', 'entity_id': 'switch.test',
        'name': 'Christmas Tree Lights'
    }})
    await hass.async_block_till_done()

    state = hass.states.get('light.christmas_tree_lights')
    assert state is not None
    assert state.state == 'unavailable'
    assert state.attributes['supported_features'] == 0
    assert state.attributes.get('brightness') is None
    assert state.attributes.get('hs_color') is None
    assert state.attributes.get('color_temp') is None
    assert state.attributes.get('white_value') is None
    assert state.attributes.get('effect_list') is None
    assert state.attributes.get('effect') is None


async def test_light_service_calls(hass):
    """Test service calls to light."""
    await async_setup_component(hass, 'switch', {'switch': [
        {'platform': 'demo'}
    ]})
    await async_setup_component(hass, 'light', {'light': [
        {'platform': 'switch', 'entity_id': 'switch.decorative_lights'}
    ]})
    await hass.async_block_till_done()

    assert hass.states.get('light.light_switch').state == 'on'

    common.async_toggle(hass, 'light.light_switch')
    await hass.async_block_till_done()

    assert hass.states.get('switch.decorative_lights').state == 'off'
    assert hass.states.get('light.light_switch').state == 'off'

    common.async_turn_on(hass, 'light.light_switch')
    await hass.async_block_till_done()

    assert hass.states.get('switch.decorative_lights').state == 'on'
    assert hass.states.get('light.light_switch').state == 'on'

    common.async_turn_off(hass, 'light.light_switch')
    await hass.async_block_till_done()

    assert hass.states.get('switch.decorative_lights').state == 'off'
    assert hass.states.get('light.light_switch').state == 'off'


async def test_switch_service_calls(hass):
    """Test service calls to switch."""
    await async_setup_component(hass, 'switch', {'switch': [
        {'platform': 'demo'}
    ]})
    await async_setup_component(hass, 'light', {'light': [
        {'platform': 'switch', 'entity_id': 'switch.decorative_lights'}
    ]})
    await hass.async_block_till_done()

    assert hass.states.get('light.light_switch').state == 'on'

    switch_common.async_turn_off(hass, 'switch.decorative_lights')
    await hass.async_block_till_done()

    assert hass.states.get('switch.decorative_lights').state == 'off'
    assert hass.states.get('light.light_switch').state == 'off'

    switch_common.async_turn_on(hass, 'switch.decorative_lights')
    await hass.async_block_till_done()

    assert hass.states.get('switch.decorative_lights').state == 'on'
    assert hass.states.get('light.light_switch').state == 'on'