"""SubmissionFilter
Searches submissions for a key and/or a market
"""

from optparse import OptionParser
import IMS

parser = OptionParser(usage="SubmissionFilter.py [options]",version = "%prog 0.1")

parser.add_option("-c","--code",
		action="store",type="string",dest="key",
		help="Gets submission for the story code",default="All")
parser.add_option("-m","--market",
		action="store",type="string",dest="market",
		help="Gets the stories that have gone to that market",default="All")
parser.add_option("-y","--year",
		action="store",type="int",dest="year",
		help="Limits results to given year")
parser.add_option("-s","--status",
		action="store",type="string",dest="status",
		help="Limits results to given status (InMail,Reject,Sale)")
parser.add_option("-t","--usereturn",
		action="store_true",dest="usereturn",default=False,
		help="Sorts results by return date [false by default]")
parser.add_option("-i","--in-order",
		action="store_false",dest="reverse", default=False,
		help="Sorts results by oldest first [default]")
parser.add_option("-r","--reverse",
		action="store_true",dest="reverse",
		help="Reverses results sorting")
		
subfiler = IMS.SubFiler()


def SubmissionFilter(argstring=""):
	(options,args) = parser.parse_args(argstring.split())
	sublist = [subfiler.getSubmission(key) for key in subfiler.keys()]
	

	if options.key and options.key.lower() != "all":
		sublist = filter(lambda s:s.storycode.lower()==options.key.lower(),sublist)
	
	if options.market and options.market.lower() !="all":
		thisfilter = lambda s:s.market.lower()==options.market.lower()
		sublist = filter(thisfilter,sublist)
	
	if options.year:
		thisfilter = lambda s:IMS.StringToDate(s.datesent).year==options.year
		sublist = filter(thisfilter,sublist)
	
	if options.status:
		thisfilter = lambda s:s.status.lower()==options.status.lower()
		sublist = filter(thisfilter,sublist) 
	
	if options.usereturn:
		#This isn't as easy, since inmail stories don't have a date
		sortedresults = []
		for sub in sublist:
			if hasattr(sub,'dateback'):
				sortedresults.append((IMS.StringToDate(sub.dateback),sub))
			else:
				sortedresults.append((IMS.date.today(),sub))
		#sortedresults = [(IMS.StringToDate(sub.dateback),sub) for sub in sublist]
	else:
		sortedresults = [(IMS.StringToDate(sub.datesent),sub) for sub in sublist]
	sortedresults.sort()
	if options.reverse: sortedresults.reverse()
	sortedresults = [x[1] for x in sortedresults]
		
	return [s.code for s in sortedresults]

def SubmissionFilterReport(argstring=""):
	(options,args) = parser.parse_args(argstring.split())
	#print options,args
	sublist = [subfiler.getSubmission(key) for key in SubmissionFilter(argstring)]
	if options.key.lower() == "all":
		allstories = True
		#print "Searching for all submissions..."
	elif options.key:
		allstories = False
		print "Searching for story code",options.key
	
	
	if options.market and options.market.lower() !="all":
		print "Searching for submissions to %s " % options.market.title()
		allstories = False

	if options.year:
		print "Searching for submissions in year %d..." % options.year
		allstories = False
	
	if options.status:
		print "Searching for %s stories..." % options.status.title()
		allstories = False
	
	if allstories: print "Searching for all submissions"
	if sublist:
		longestname = max([len(sub.story) for sub in sublist])
		longestmarket = max([len(sub.market) for sub in sublist])
		
		sortedresults = [(IMS.StringToDate(sub.datesent),sub) for sub in sublist]
		sortedresults.sort()
		if options.reverse: sortedresults.reverse()
		sortedresults = [x[1] for x in sortedresults]
		
		for sub in sublist:
			if hasattr(sub,"note"): tempnote = sub.note
			else: tempnote = ""
			if hasattr(sub,"daysout"): daysout = sub.daysout
			else: daysout = 0
			if hasattr(sub,"dateback"):dateback = sub.dateback
			else: dateback = "none        "
			print sub.code.ljust(13),sub.datesent,sub.story.ljust(longestname),sub.market.ljust(longestmarket),sub.status,dateback,"%3d" % sub.HowLong(),tempnote
		print len(sublist),"Submissions found"
	else:
		print "No submissions found"
		
	
if __name__=="__main__":
	from EasyDialogs import AskString
	args = AskString('Options and Arguments')
	
	SubmissionFilterReport(args)
	print 'done'
