#!/usr/bin/python

import sys, os
if 'GEET_DEBUG' in os.environ:
    program_path = sys.path[0]
    sys.path.insert(0, os.path.join(program_path, 'modules'))
from geet_client import PackageManager
from geet.utils import StringBuilder
import geet_client.option_parser as option_parser

help="""
geet-package create <name> [<options>]
geet-package remove <name>
geet-package search <pattern>
geet-package options <name> [<options>]

<options> is list of arguments. Each argumend add, set, deleate or modify one
option.
Type
<key>=<value>[,<value>]*
if you want create or set option.
Type
-<key>
to delete option.
Type
<key>+=<value>[,<value>]*
to add values to list-option, option will be created if needed.
Type
<key>-=<value>[,<value>]*
to delete values from list-option.

Valid options:
archive - name of archive, if is not set name of package will be used
git - path to source git
refspec - refspec of source git
branch - archive branch
"""

def error_arguments():
    print help
    sys.exit(1)

if len(sys.argv) < 3:
    error_arguments()

name = sys.argv[2]

if sys.argv[1] == 'create':
    opts = {}
    for i in sys.argv[3:]:
        t = option_parser.Token(i)
        if t.t != option_parser.SET:
            error_arguments()
        opts[t.key] = t.value
    pkg = PackageManager().create(name)
    pkg.setOptions(opts)
elif sys.argv[1] == 'remove':
    PackageManager().remove(name)
elif sys.argv[1] == 'search':
    for pkg in PackageManager().search(sys.argv[2]):
        print pkg
elif sys.argv[1] == 'options':
    pkg = PackageManager().get(sys.argv[2])
    if len(sys.argv) == 3:
        print pkg.options()
    else:
        opts = pkg.options()
        for i in sys.argv[3:]:
            t = option_parser.Token(i)
            if t.t == option_parser.SET:
                opts[t.key] = t.value
            elif t.t == option_parser.UNSET:
                del opts[t.key]
            else:
                error_arguments()
        pkg.setOptions(opts)
else:
    error_arguments()
