#! /usr/bin/python

import sys, os
from zeitgeist.datamodel import Event, Subject, ResultType, TimeRange
from zeitgeist.client import ZeitgeistDBusInterface

USAGE = \
"""Talis is a command line tool to search your history.
USAGE:
	talis [options] <enter search terms here>

OPTIONS:
	--mode=, -m=   MODE
	--offset=, -o= Offset into result set
	--hits=, -h=   Max number of hits to return

MODES:
	LeastPopularActor
	LeastPopularSubjects
	LeastRecentActor
	LeastRecentEvents
	LeastRecentSubjects
	MostPopularActor
	MostPopularSubjects
	MostRecentActor
	MostRecentEvents
	MostRecentSubjects
	Relevancy (default)
"""

if len(sys.argv) <= 1:
	print USAGE
	raise SystemExit(1)

offset = 0
maxhits = 10
mode = 100
mode_string = "Relevancy"
query = ""
for i in range(1, len(sys.argv)):
	if sys.argv[i].startswith("--mode=") or sys.argv[i].startswith("-m="):
		mode_string = sys.argv[1].replace("--mode=", "").replace("-m=", "").strip()
		if mode_string == "Relevancy":
			mode = 100
		else:
			mode = getattr(ResultType, mode_string)
	elif sys.argv[i].startswith("--offset=") or sys.argv[i].startswith("-o="):
		offset = int(sys.argv[i].replace("--offset=", "").replace("-o=", "").strip())
	elif sys.argv[i].startswith("--hits=") or sys.argv[i].startswith("-h="):
		maxhits = int(sys.argv[i].replace("--hits=", "").replace("-h=", "").strip())
	else:
		query += " " + sys.argv[i]
		
query = query.strip()

fts = ZeitgeistDBusInterface().get_extension("Index", "index/activity")
results, count = fts.Search(query, TimeRange.always(), [], offset, maxhits, mode)

print "%s-%s of %s hits for '%s'. Sorted by '%s':" % (offset+1, len(results)+offset, count, query, mode_string)

i = offset+1
events = map(Event, results)
for event in events:
	for subject in event.subjects:
		print " %s. %s" % (i, subject.uri)
		i += 1
