#!/usr/bin/python
'''
    # DESCRIPTION:
    # server tools for querying database

    Copyright (C) 2007-2008 Fabio Erculiani

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
'''

from outputTools import *
from entropyConstants import *
import text_query
from entropy import ServerInterface
from entropy_i18n import _

def query(myopts):

    if not myopts:
        return 10
    cmd = myopts[0]
    myopts = myopts[1:]
    if not myopts and cmd not in ["list"]:
        return 10

    rc = 0
    Entropy = ServerInterface()
    dbconn = Entropy.openServerDatabase(just_reading = True)

    if cmd == "search":

        # open read only
        count = 0
        for mykeyword in myopts:
            results = dbconn.searchPackages(mykeyword)
            for result in results:
                count += 1
                text_query.printPackageInfo(    result[1],
                                                dbconn,
                                                clientSearch = True,
                                                extended = True,
                                                EquoConnection = Entropy
                                            )

        if not count:
            print_warning(red(" * ")+red("%s." % (_("Nothing found"),) ))
        rc = 0

    elif cmd == "tags":
        searchTaggedPackages(myopts, dbconn, Entropy)
    elif cmd == "files":
        text_query.searchFiles(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "belongs":
        text_query.searchBelongs(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "description":
        text_query.searchDescriptions(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "needed":
        text_query.searchNeeded(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "depends":
        text_query.searchDepends(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "eclass":
        text_query.searchEclass(myopts, dbconn = dbconn, EquoConnection = Entropy)
    elif cmd == "list":
        text_query.searchInstalled(dbconn = dbconn, EquoConnection = Entropy)

    del Entropy
    return rc


def searchTaggedPackages(tags, dbconn, entropy):

    if not etpUi['quiet']:
        print_info(darkred(" @@ ")+darkgreen("%s..." % (_("Tag Search"),) ))
        print_info(blue("  # ")+bold(entropy.default_repository))

    for tag in tags:
        results = dbconn.searchTaggedPackages(tag, atoms = True)
        for result in results:
            if etpUi['quiet']:
                print dbconn.retrieveAtom(result[1])
            else:
                text_query.printPackageInfo(result[1], dbconn, EquoConnection = entropy)
        if not etpUi['quiet']:
            print_info(blue(" %s: " % (_("Keyword"),) )+bold("\t"+tag))
            print_info(blue(" %s:   " % (_("Found"),) )+bold("\t"+str(len(results)))+red(" %s" % (_("entries"),) ))

    return 0