#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""num2words: convert numbers into words.

Usage:
    num2words [options] <number>
    num2words --list-languages
    num2words --list-converters
    num2words --help

Arguments:
    <number>                Number you want to convert into words

Options:
    -L --list-languages     Show all languages.
    -C --list-converters    Show all converters.
    -l --lang=<lang>        Output language [default: en].
    -t --to=<to>            Output converter [default: cardinal].
    -h --help               Show this message.
    -v --version            Show version.
    
Examples:
    $ num2words 10001
    ten thousand and one
    
    $ num2words 10123123 --lang es
    diez millones ciento veintitrés mil ciento veintitrés

    $ num2words 24,120.10
    twenty-four thousand, one hundred and twenty point one

    $ num2words 24,120.10 -l es
    veinticuatro mil ciento veinte punto uno

    $num2words 2.14 -l es --to currency
    dos euros con catorce centimos
"""
from __future__ import print_function, unicode_literals
import os
import sys
from docopt import docopt
import num2words

__version__ = "0.5.8"
__license__ = "LGPL"


def get_languages():
    return sorted(list(num2words.CONVERTER_CLASSES.keys()))


def get_converters():
    return sorted(list(num2words.CONVERTES_TYPES))


def main():
    version = "{}=={}".format(os.path.basename(__file__), __version__)
    args = docopt(__doc__, argv=None, help=True, version=version, options_first=False)
    if args["--list-languages"]:
        for lang in get_languages():
            sys.stdout.write(lang)
            sys.stdout.write(os.linesep)
        sys.exit(0)
    if args["--list-converters"]:
        for lang in get_converters():
            sys.stdout.write(lang)
            sys.stdout.write(os.linesep)
        sys.exit(0)
    try:
        words = num2words.num2words(args['<number>'], lang=args['--lang'], to=args['--to'])
        sys.stdout.write(words+os.linesep)
        sys.exit(0)
    except Exception as err:
        sys.stderr.write(str(args['<number>']))
        sys.stderr.write(str(err) + os.linesep)
        sys.stderr.write(__doc__)
        sys.exit(1)


if __name__ == '__main__':
    main()
