#!/usr/bin/env python
# coding: utf-8
"Access searchAC from html search form"
# TODO selection table media :
# xspf always wd6t !
# list -> always wd8t ! default
# ATTENTION à l'impact sur modify / delete

import cgi
import cgitb
cgitb.enable() # on production : cgitb.enable(display=0, logdir="/path/to/logdir")
#import re
DO_PL = True # creates playlist

from HTML_util import *
HTML_header()

import AC_util

def populateElemt(key, val):
	"prepares datas for search"
	global elemt
	if key == 'year':
		val = AC_util.isAnumber(key,val)
		if val == None: HTML_abort(AC_util.Emsg)
	else : val = val.decode('utf-8')
	if key == 'title': key = 'name'
	elemt.append((key, val))

form = cgi.FieldStorage()
export = 'export' in form
verbose = 'verbose' in form
AC_util.verbose = verbose
if verbose:
	HTML_headerClose(msg='')
	print form,"\n<br>"
	#exit(0)
if (('keyword' in form) and ('keyType' in form)) or ("acid" in form) or ("ID" in form) or (('keyword[]' in form) and ('keyType[]' in form)) or ('path' in form):
	if "Idb" in form:
		tmp = form['Idb'].value
		if tmp in AC_util.Idbs: AC_util.AC_table = tmp
		else: print "Error '%s' not in Idbs<br>"%tmp
	if "Mdb" in form:
		tmp = form['Mdb'].value
		if tmp in AC_util.Mdbs: AC_util.col_table = tmp
		else: print "Error '%s' not in Mdbs<br>"%tmp
	if ("acid" in form) or ("ID" in form):
		key = 'acid' if "acid" in form else 'ID'
		N = AC_util.isAnumber(key, form[key].value)
		if N == None: HTML_abort(AC_util.Emsg)
	if "acid" in form:
		print "<title>Search for ACID = %s</title>"%form['acid'].value
		print insert_PageHeader() # includes clic css, scripts
		print insert_BodyHead(NoMov=1, onLoad="focus()") # includes help & movie divs
		print AC_util.showWhere(N)
		HTML_abort()
	elif "ID" in form:
		print "<title>Show media ID %d</title>"%N
		print '<style type="text/css">body {font-family:sans} th {text-align:right}</style>'
		HTML_headerClose()
		res = AC_util.getMediaRec(N)
		if res == None: print "<h3>No match for ID %d</h3>"%N
		else:
			import FS_util
			if FS_util.checkMediaMounted():
				import urllib
				# title = AC_util.makeName(res['allocine_ref']) # TODO: field for updating mkv file
				#print '<a href="infoMedia?media=%s/%s/%s&title=%s">info</a> '%(FS_util.mount, res['path'], urllib.quote(res['name']),title)
				print '<a href="infoMedia?media=%s/%s/%s">info</a> '%(FS_util.mount, res['path'], urllib.quote(res['name']))
				print '<a href="playMedia?media=%s/%s/%s">play</a><br>'%(FS_util.mount, res['path'], urllib.quote(res['name']))
			else: print "media not mounted, can't play !<br>\n"
			print '<a href="deleteMedia?ID=%d&Mdb=%s">delete</a> or '%(N,AC_util.col_table)
			print '<a href="updateMedia?ID=%d&Mdb=%s">update</a> (location or name) on media %s'%(N,AC_util.col_table,AC_util.col_table)
			print '<table>'
			for key in res:
				if (res[key] != None) and (key != 'run'):
					print '<tr><th>%s</th><td>%s</td></tr>\n'%(key, AC_util.dataOut(res[key]))
			print '</table>'
		HTML_abort()
	elemt = []
	if 'keyword' in form :
		populateElemt(form['keyType'].value, form['keyword'].value)
	else:
		text, tab = '', {}
		for key in form:
			if key == 'keyword[]': continue
			if key == 'keyType[]':
				if type(form[key]) == list:
					tab['keyType'], tab['keyword'], i = [], [], 0
					for item in form[key]:
						if type(form['keyword[]']) == list:
							if i < len(form['keyword[]']):
								tab['keyType'].append(item.value)
								tab['keyword'].append(form['keyword[]'][i].value)
							i += 1
						else:
							tab['keyType'].append(item.value)
							tab['keyword'].append(form['keyword[]'].value)
							break
				else:
					tab['keyType'] = form[key].value
					tab['keyword'] = form['keyword[]'].value
			else:
				if type(form[key]) == list:
					tab[key] = []
					for item in form[key]:
						tab[key].append(item.value)
				else: tab[key] = form[key].value
		if type(tab['keyType']) == list:
			for i,key in enumerate(tab['keyType']):
				populateElemt(key, tab['keyword'][i])
			""" i=0
			for key in tab['keyType']:
				populateElemt(key, tab['keyword'][i])
				i += 1 """
		else: populateElemt(tab['keyType'], tab['keyword'])
		msg = str(elemt)
		#HTML_abort(msg + "not finished")
	if not export:
		title = "multiple keys" if len(elemt) > 1 else "%s - %s"%(elemt[0][0],elemt[0][1])
		print "	<title>Search AC by %s</title>"%title.encode('utf-8')
		print insert_PageHeader() # includes clic css, scripts
	#print elemt
	res = AC_util.searchAC(elemt,verbose=verbose) # send request to db
	if res == None:
		print AC_util.msg.encode('utf-8')
		res = []
	if len(res) == 0:
		print insert_BodyHead(NoMov=1) # includes help & movie divs
		print "<h3>No match !</h3>"
		print """<a id="query_sh" href="#" onclick="showHide('query')">show</a> query<div id="query" style="display:none">%s</div>"""%AC_util.query
	else:
		if len(res) == 1:
			ACID = res[0]['ACID']
			res = AC_util.getACrec(ACID)
			if export:
				if res['title_orig'] == None:
					res['title_orig'] = ''
				print "<title>fiche %s - %s</title>"%(res['title'].encode('utf-8'), res['title_orig'].encode('utf-8'))
				print insert_PageHeader(True)
				print insert_BodyHead(NoMov=1,onLoad=None)
				AC_util.printOutHtm(res,local=1)
			else:
				print insert_BodyHead()
				AC_util.printOutHtm(res)
				print '<br>\n'
				print AC_util.showWhere(ACID)
		else:
			print insert_ExtraStylesList() + insert_BodyHead() # includes help & movie divs
			print '<h3>Found %d films in %s</h3>\n'%(len(res), AC_util.col_table)
			if DO_PL: playlist = []
			print '<div id="list" style="max-width: 400px">'
			for tab in res:
				AC_util.printLineHtm(tab)
				if DO_PL:
					tmp = AC_util.findWhere(tab['ACID'])
					if len(tmp) > 0:
						for mf in tmp:
							playlist.append({'path':'%s/%s'%(mf['path'],mf['name'])})
			print '</div>'
			if DO_PL:
				import make_xspf
				if title != None: make_xspf.title = "Liste AC/%s : %s"%(AC_util.col_table.upper(), title)
				print """<a href="#" onclick="showHide('xspf')\">
				<span id="xspf_sh">show</span></a> playlist
"""
				print """<div id="xspf" style="display:none"><form id="form1" action="download" method="POST"><input type="hidden" name="title" value="playlist.xspf"><input type="hidden" name="content" value=""><input type="submit" value="download" onclick="document.form1.content.value=document.getElementById('xspf_text').value"><textarea id="xspf_text" style="width:100%%;height:200px">%s</textarea></form></div>"""%make_xspf.makeXspf(playlist).encode('utf8')

	if ('keyType' in form and form['keyType'].value != 'ACID') or not ('keyType' in form) :
		print AC_util.insert_form(elemt)
else:
	if 'test' not in form: print '	<meta http-equiv="refresh" content="3; url=/ac/searchAC.htm">'
	print HTML_headerClose("<h1>No keyword submitted.</h1>")
	print "<h3>form content:</h3>"
	text, tab = '', {}
	for key in form: #('keyword', 'keyType')
		ne = """tab[key] = AC_util.dataOut(form[key].value)
		text += "<b>%s</b>: %s<br>\n"%(key, cgi.escape(form[key].value))"""
		if type(form[key]) == list:
			tab[key] = []
			for item in form[key]:
				tab[key].append( AC_util.dataOut(item.value))
		else: tab[key] = AC_util.dataOut(form[key].value)
	for key in tab:
		print "<b>%s</b>: "%key, tab[key],
		print '<br>\n'
	print "<pre>%s</pre>"%tab
	print text
	if 'test' not in form: print '<br><a href="/ac/searchAC.htm">retry</a>'

HTML_abort()
