"""
Support for Zabbix.

For more details about this component, please refer to the documentation at
https://home-assistant.io/components/zabbix/
"""
import logging
from urllib.parse import urljoin

import voluptuous as vol

from homeassistant.const import (
    CONF_PATH, CONF_HOST, CONF_SSL, CONF_PASSWORD, CONF_USERNAME)
import homeassistant.helpers.config_validation as cv

REQUIREMENTS = ['pyzabbix==0.7.4']

_LOGGER = logging.getLogger(__name__)

DEFAULT_SSL = False
DEFAULT_PATH = 'zabbix'

DOMAIN = 'zabbix'


CONFIG_SCHEMA = vol.Schema({
    DOMAIN: vol.Schema({
        vol.Required(CONF_HOST): cv.string,
        vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
        vol.Optional(CONF_PATH, default=DEFAULT_PATH): cv.string,
        vol.Optional(CONF_USERNAME): cv.string,
        vol.Optional(CONF_PASSWORD): cv.string
    })
}, extra=vol.ALLOW_EXTRA)


def setup(hass, config):
    """Set up the Zabbix component."""
    from pyzabbix import ZabbixAPI, ZabbixAPIException

    conf = config[DOMAIN]
    if conf[CONF_SSL]:
        schema = 'https'
    else:
        schema = 'http'

    url = urljoin('{}://{}'.format(schema, conf[CONF_HOST]), conf[CONF_PATH])
    username = conf.get(CONF_USERNAME, None)
    password = conf.get(CONF_PASSWORD, None)

    zapi = ZabbixAPI(url)
    try:
        zapi.login(username, password)
        _LOGGER.info("Connected to Zabbix API Version %s", zapi.api_version())
    except ZabbixAPIException:
        _LOGGER.error("Unable to login to the Zabbix API")
        return False

    hass.data[DOMAIN] = zapi
    return True
