#!/usr/bin/env python
# vim: ft=python
# TODO support py2 if requests_html supports
__doc__ = "Simple CLI for searching word meanings from UrbanDictionary"

import argparse
import html

import requests_html
import urllib


def main():
    parser = argparse.ArgumentParser(__doc__)
    parser.add_argument(
        "word",
        help="Word to search for meaning on UrbanDictionary",
        type=str,
        nargs="+",
    )
    args = parser.parse_args()
    word_to_search = " ".join(args.word)
    sess = requests_html.HTMLSession()
    r = sess.get(
        "https://www.urbandictionary.com/define.php?term={}".format(
            urllib.parse.quote(word_to_search)
        )
    )
    meaning_divs = r.html.xpath('//div[@class="meaning"]')
    print("UrbanDictionary results for {!r}".format(word_to_search))

    def pad_lines(text, pad="   "):
        return "\n".join(
            (
                "{pad}{line}".format(line=html.unescape(line), pad=pad)
                for line in text.splitlines()
            )
        )

    for idx, node in enumerate(meaning_divs, start=1):
        print("{:>3}.  {}".format(idx, pad_lines(node.text)))


if __name__ == "__main__":
    main()
