#!python

import argparse

import requests

from gitsearch import git_entities
from gitsearch.output import display_table

base_url = "https://api.github.com/search/%s?q=%s"

headings = {'users': ['username', 'url'], 'repositories': ['name', 'owner', 'url']}


def display_results(results, scope):
    display_table(results, headings[scope])


def execute_search(config, query):
    query_string = create_query_string(config, query)
    request_url = base_url % (config.scope, "+".join(query_string))
    print(request_url)
    r = requests.get(request_url)
    if r.status_code == 200:
        data = r.json()
        results = []
        for item in data['items']:
            results.append(git_entities.create_git_object(config.scope, item))
        display_results(results, config.scope)


def create_query_string(config, query):
    if config.language:
        query.append("language:%s" % config.language)
    if config.user:
        query.append("user:%s" % config.user)
    if config.nameonly:
        query.append("in:name")
    if config.descriptiononly:
        query.append("in:description")
    return query


def main():
    parser = argparse.ArgumentParser(description='Search github.')
    parser.add_argument('--scope', help='Search in users', default='repositories', choices=['repositories', 'users'])
    parser.add_argument('-l', '--language', help='Specify the language to search for')
    parser.add_argument('-u', '--user', help='Specify the user to search for')
    parser.add_argument('--nameonly', help='Only search in the name', action='store_true', default=False)
    parser.add_argument('--descriptiononly', help='Only search in the name', action='store_true', default=False)
    config, query = parser.parse_known_args()
    execute_search(config, query)


if __name__ == "__main__":
    main()
