#!/usr/bin/env python

import sys
import os
import logging
import argparse

import lxml.etree

_APP_PATH = \
    os.path.join(os.path.dirname(__file__), '..', '..', '..')

sys.path.insert(0, os.path.abspath(_APP_PATH))

import geonames.config.log
import geonames.compat
import geonames.adapters.search

def _parse_args():
    description = "Do a semantic-web search over geonames data"
    parser = argparse.ArgumentParser(description=description)

    parser.add_argument(
        'username',
        help='Username')

    parser.add_argument(
        '-p', '--parameter',
        nargs=2,
        action='append',
        default=[],
        metavar=('key', 'value'),
        dest='parameters',
        help='Parameter')

    args = parser.parse_args()

    return args

def _main():
    args = _parse_args()

    username = args.username
    parameters = args.parameters

    sa = geonames.adapters.search.Search(username)
    
    for k, v in parameters:
        try:
            method = getattr(sa, k)
        except AttributeError:
            print("Parameter is not valid: [{0}]".format(k))
            sys.exit(1)

        method(v)

    results = sa.get_flat_results()
    results = list(results)
     
    if results:
        for (id_, name) in results:
            print(geonames.compat.make_unicode("[{0}]: [{1}]").format(id_, name))
    else:
        print("No results found.")

    print('')

if __name__ == '__main__':
    _main()
