#!/usr/bin/python

EX_NOTFOUND = 127
INSTALL_CMD = "sudo zypper install"

def print_found(rows):
    print >> sys.stderr
    print >> sys.stderr, ngettext("The program '%(prog)s' can be found in the following package:", "The program '%(prog)s' can be found in following packages:", len(rows)) % \
            ({'prog' : term})
    for row in rows:
        print >> sys.stderr, _("  * %(prog)s [ path: %(path)s/%(binary)s, repository: %(repo)s ]") % \
                ({'prog' : row[3], 'path' : row[2], 'binary' : row[1], 'repo' : row[0]})
    print >> sys.stderr
    print >> sys.stderr, _('Try installing with:'), INSTALL_CMD,
    if len( set( [ i[1] for i in rows] ) ) > 1:
        print >> sys.stderr, _('<selected_package>')
    else:
        print >> sys.stderr, rows[0][3]
    print >> sys.stderr
    sys.exit(EX_NOTFOUND)

def print_installed(term, pkg, path):
    print >> sys.stderr
    print >> sys.stderr, _("Program '%(prog)s' is present in package '%(pkg)s', which is installed on your system.") % ( {'prog' : term, 'pkg' : pkg } )
    print >> sys.stderr
    if '/sbin' in path:
        print >> sys.stderr, _("Absolute path to '%(prog)s' is '%(path)s/%(prog)s', so it might be intended to be run only by user with superuser privileges (eg. root).") % \
                ( {'prog' : term , 'path' : path} )
    else:
        print >> sys.stderr, _("Absolute path to '%(prog)s' is '%(path)s/%(prog)s'. Please check your $PATH variable to see whether it contains the mentioned path.") % \
                ( {'prog' : term , 'path' : path} )
    print >> sys.stderr
    sys.exit(EX_NOTFOUND)

def check_installed(term):
    ts = rpm.TransactionSet()
    mi = ts.dbMatch('name', term)
    return mi.count() > 0

try:
    import sys

    if len(sys.argv) < 3:
        sys.exit(EX_NOTFOUND)

    import rpm
    import scout

    default_lang = scout.DefaultLang(textdomain="command-not-found")
    default_lang.install()

    sys.path.append(scout.Config.module_path)
    import bin

    term = sys.argv[1]
    repo = sys.argv[2]
    module = bin.ScoutModule()
    if repo == 'zypp':
        rows = module.query_zypp(term)
    else:
        rows = module.query_repo(repo, term)

    if rows == None or len(rows) == 0:
        sys.exit(EX_NOTFOUND)

    for row in rows:
        if check_installed(row[3]):
            print_installed(term, row[3], row[2])

    print_found(rows)

except:
    pass

sys.exit(EX_NOTFOUND)
