#!/usr/bin/env python
# coding: utf-8
"""Usage:
tues-provider-fm [--foreman-url=<url>] [<expression>]

Options:
  <expression>                   The foreman filter expression.
  --foreman-url=<url>            URL to your foreman installation.
"""

from __future__ import print_function

import os as _os
import functools as _ft

import docopt as _docopt
import requests as _requests


def hosts(url, query=None):
    params = {"per_page": 10000, "thin": 1}
    if query is not None:
        params["search"] = query

    get = _ft.partial(
        _requests.get,
        params=params,
        headers={
            "Content-Type": "application/json",
            "Accept": "application/json",
        },
    )

    response = get("%s/api/v2/hosts" % (url,))

    if response.status_code != 200:
        raise Exception("Could not get host list, call returned(%r): %r" % (response.status_code, response.text))

    hosts = response.json()
    if isinstance(hosts, dict) and "results" in hosts:
        return [host["name"] for host in hosts["results"]]

    return [host["host"]["name"] for host in hosts]


if __name__ == '__main__':
    args = _docopt.docopt(__doc__)
    foreman_url = args["--foreman-url"] or _os.environ.get("FOREMAN_URL")

    if not foreman_url:
        raise Exception(
            "You need to provide a foreman url either by setting FOREMAN_URL or passing --foreman-url"
        )

    hosts = hosts(foreman_url, args['<expression>'])
    print("\n".join(hosts))
