"""Support for Owlet baby monitors."""
import logging

import voluptuous as vol

from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.discovery import load_platform

from .const import (
    SENSOR_BASE_STATION, SENSOR_HEART_RATE, SENSOR_MOVEMENT,
    SENSOR_OXYGEN_LEVEL)

_LOGGER = logging.getLogger(__name__)

DOMAIN = 'owlet'

SENSOR_TYPES = [
    SENSOR_OXYGEN_LEVEL,
    SENSOR_HEART_RATE,
    SENSOR_BASE_STATION,
    SENSOR_MOVEMENT,
]

CONFIG_SCHEMA = vol.Schema({
    DOMAIN: vol.Schema({
        vol.Required(CONF_USERNAME): cv.string,
        vol.Required(CONF_PASSWORD): cv.string,
        vol.Optional(CONF_NAME): cv.string,
    }),
}, extra=vol.ALLOW_EXTRA)


def setup(hass, config):
    """Set up owlet component."""
    from pyowlet.PyOwlet import PyOwlet

    username = config[DOMAIN][CONF_USERNAME]
    password = config[DOMAIN][CONF_PASSWORD]
    name = config[DOMAIN].get(CONF_NAME)

    try:
        device = PyOwlet(username, password)
    except KeyError:
        _LOGGER.error("Owlet authentication failed. Please verify your "
                      "credentials are correct")
        return False

    device.update_properties()

    if not name:
        name = '{}\'s Owlet'.format(device.baby_name)

    hass.data[DOMAIN] = OwletDevice(device, name, SENSOR_TYPES)

    load_platform(hass, 'sensor', DOMAIN, {}, config)
    load_platform(hass, 'binary_sensor', DOMAIN, {}, config)

    return True


class OwletDevice():
    """Represents a configured Owlet device."""

    def __init__(self, device, name, monitor):
        """Initialize device."""
        self.name = name
        self.monitor = monitor
        self.device = device
