"""
homeassistant.components.notify.instapush
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Instapush notification service.

Configuration:

To use the Instapush notifier you will need to add something like the following
to your configuration.yaml file.

notify:
  platform: instapush
  api_key: YOUR_APP_KEY
  app_secret: YOUR_APP_SECRET
  event: YOUR_EVENT
  tracker: YOUR_TRACKER

Variables:

api_key
*Required
To retrieve this value log into your account at https://instapush.im and go
to 'APPS', choose an app, and check 'Basic Info'.

app_secret
*Required
To get this value log into your account at https://instapush.im and go to
'APPS'. The 'Application ID' can be found under 'Basic Info'.

event
*Required
To retrieve a valid event log into your account at https://instapush.im and go
to 'APPS'. If you have no events to use with Home Assistant, create one event
for your app.

tracker
*Required
To retrieve the tracker value log into your account at https://instapush.im and
go to 'APPS', choose the app, and check the event entries.

Example usage of Instapush if you have an event 'notification' and a tracker
'home-assistant'.

curl -X POST \
    -H "x-instapush-appid: YOUR_APP_KEY" \
    -H "x-instapush-appsecret: YOUR_APP_SECRET" \
    -H "Content-Type: application/json" \
      -d '{"event":"notification","trackers":{"home-assistant":"Switch 1"}}' \
    https://api.instapush.im/v1/post

Details for the API : https://instapush.im/developer/rest
"""
import logging
import json

from homeassistant.helpers import validate_config
from homeassistant.components.notify import (
    DOMAIN, ATTR_TITLE, BaseNotificationService)
from homeassistant.const import CONF_API_KEY

_LOGGER = logging.getLogger(__name__)
_RESOURCE = 'https://api.instapush.im/v1/'


def get_service(hass, config):
    """ Get the instapush notification service. """

    if not validate_config(config,
                           {DOMAIN: [CONF_API_KEY,
                                     'app_secret',
                                     'event',
                                     'tracker']},
                           _LOGGER):
        return None

    try:
        import requests

    except ImportError:
        _LOGGER.exception(
            "Unable to import requests. "
            "Did you maybe not install the 'Requests' package?")

        return None

    # pylint: disable=unused-variable
    try:
        response = requests.get(_RESOURCE)

    except requests.ConnectionError:
        _LOGGER.error(
            "Connection error "
            "Please check if https://instapush.im is available.")

        return None

    instapush = requests.Session()
    headers = {'x-instapush-appid': config[DOMAIN][CONF_API_KEY],
               'x-instapush-appsecret': config[DOMAIN]['app_secret']}
    response = instapush.get(_RESOURCE + 'events/list',
                             headers=headers)

    try:
        if response.json()['error']:
            _LOGGER.error(response.json()['msg'])
    # pylint: disable=bare-except
    except:
        try:
            next(events for events in response.json()
                 if events['title'] == config[DOMAIN]['event'])
        except StopIteration:
            _LOGGER.error(
                "No event match your given value. "
                "Please create an event at https://instapush.im")
        else:
            return InstapushNotificationService(
                config[DOMAIN].get(CONF_API_KEY),
                config[DOMAIN]['app_secret'],
                config[DOMAIN]['event'],
                config[DOMAIN]['tracker']
                )


# pylint: disable=too-few-public-methods
class InstapushNotificationService(BaseNotificationService):
    """ Implements notification service for Instapush. """

    def __init__(self, api_key, app_secret, event, tracker):
        # pylint: disable=no-name-in-module, unused-variable
        from requests import Session

        self._api_key = api_key
        self._app_secret = app_secret
        self._event = event
        self._tracker = tracker
        self._headers = {
            'x-instapush-appid': self._api_key,
            'x-instapush-appsecret': self._app_secret,
            'Content-Type': 'application/json'}

        self.instapush = Session()

    def send_message(self, message="", **kwargs):
        """ Send a message to a user. """

        title = kwargs.get(ATTR_TITLE)

        data = {"event": self._event,
                "trackers": {self._tracker: title + " : " + message}}

        response = self.instapush.post(
            _RESOURCE + 'post',
            data=json.dumps(data),
            headers=self._headers)

        if response.json()['status'] == 401:
            _LOGGER.error(
                response.json()['msg'],
                "Please check your details at https://instapush.im/")

@@ -118,736 +118,105 @@
 e.%0A%0A
-Configuration:%0A%0ATo use the Instapush notifier you will need to add something like the following%0Ato your configuration.yaml file.%0A%0Anotify:%0A  platform: instapush%0A  api_key: YOUR_APP_KEY%0A  app_secret: YOUR_APP_SECRET%0A  event: YOUR_EVENT%0A  tracker: YOUR_TRACKER%0A%0AVariables:%0A%0Aapi_key%0A*Required%0ATo retrieve this value log into your account at https://instapush.im and go%0Ato 'APPS', choose an app, and check 'Basic Info'.%0A%0Aapp_secret%0A*Required%0ATo get this value log into your account at https://instapush.im and go to%0A'APPS'. The 'Application ID' can be found under 'Basic Info'.%0A%0Aevent%0A*Required%0ATo retrieve a valid event log into your account at https://instapush.im and go%0Ato 'APPS'. If you have no events to use with Home A
+For more details about this platform, please refer to the documentation at%0Ahttps://home-a
 ssistant
 , cr
@@ -215,620 +215,44 @@
 tant
-, create one event%0Afor your app.%0A%0Atracker%0A*Required%0ATo retrieve the tracker value log into your account at https://instapush.im and%0Ago to 'APPS', choose the app, and check the event entries.%0A%0AExample usage of Instapush if you have an event 'notification' and a tracker%0A'home-assistant'.%0A%0Acurl -X POST %5C%0A    -H %22x-instapush-appid: YOUR_APP_KEY%22 %5C%0A    -H %22x-instapush-appsecret: YOUR_APP_SECRET%22 %5C%0A    -H %22Content-Type: application/json%22 %5C%0A      -d '%7B%22event%22:%22notification%22,%22trackers%22:%7B%22home-assistant%22:%22Switch 1%22%7D%7D' %5C%0A    https://api.instapush.im/v1/post%0A%0ADetails for the API : https://instapush.im/developer/rest
+.io/components/notify.instapush.html
 %0A%22%22%22

Move configuration description to docs