#!/usr/bin/env python
# coding: utf-8

import cgi
import cgitb
cgitb.enable()
from HTML_util import *
HTML_header()
import AC_util

MODIF = False
CONFIRM = False
verbose = False
UPDT_FS = False # Do modify filesystem accordingly

form = cgi.FieldStorage()
#HTML_headerClose(form)
#HTML_abort(form)

if 'ID' not in form:
	HTML_abort("nothing to do !")

mod_keys = ('name','path','allocine_ref','imdb_ref','inode')
for key in mod_keys:
	if key in form:
		MODIF = True
		break

ID = AC_util.isAnumber('ID', form['ID'].value)
if ID == None:
	HTML_abort(AC_util.Emsg)
if 'Mdb' not in form:
	HTML_abort("don't know in which collection to operate ! mention Mdb !")
Mdb = form['Mdb'].value
if Mdb not in AC_util.Mdbs:
	HTML_abort("don't know in which collection to operate ! '%s' not in Mdbs !"%Mdb)
print "<title>Change media ID %d on collection %s</title>"%(ID,Mdb)
print '<style type="text/css">body {font-family:sans} th {text-align:right}</style>'
HTML_headerClose()

import FS_util
CB_FS_OK = FS_util.checkMediaMounted() # auth to bring checkbox in form to manage media file
if 'UPDT_FS' in form:
	UPDT_FS = True
	if verbose:
		print 'UPDT_FS = %s<br>'%UPDT_FS
	if UPDT_FS:
		FS_util.verbose = verbose

if 'CONFIRM' in form:
	CONFIRM = True
	if verbose:
		print 'CONFIRM = %s<br>'%CONFIRM

res = AC_util.getMediaRec(ID)
if res == None:
	HTML_abort("No match for ID %d"%ID)

change = []
if MODIF:
	mod_color = 'lightpink'
	for key in mod_keys:
		if key in form:
			if key[-4:] == '_ref' or key == 'inode':
				form[key].value = AC_util.isAnumber(key, form[key].value)
				if form[key].value == None:
					HTML_abort(AC_util.Emsg)
			if form[key].value != res[key]:
				change.append(key)
	if verbose:
		print '<pre>change: %s</pre>'%change
		print '<pre>form: %s</pre>'%form
	if 'name' in change or 'path' in change :
		cmd = "mv "
		if res['path'] != None:
			cmd += res['path']+'/'
		cmd += res['name']+' '
		if form['path'].value == '':
			cmd += './'
		else:
			cmd += form['path'].value +'/'
		if 'name' in change :
			cmd += form['name'].value
		if CONFIRM:
			if UPDT_FS :
				ret = FS_util.updateMedia(cmd)
				if ret != 'ok':
					HTML_abort(ret)
				print ret
			else:
				FS_util.log(cmd)
	if CONFIRM and len(change) > 0:
		elemt = []
		for key in change:
			elemt.append((key, form[key].value))
		if verbose:
			print '<pre>elemt: %s</pre>'%elemt
		AC_util.verbose = verbose
		AC_util.updateMediaRec(ID,elemt)
		if AC_util.con.total_changes == 2: # trigger on modts, makes a 2nd !
			AC_util.con.commit()
			print '%d changed from %s'%(ID,Mdb)
			res = AC_util.getMediaRec(ID)
			mod_color = 'lightgreen'
		elif AC_util.con.total_changes == 0:
			print "Error, database may be locked !  nothing changed"
		else:
			HTML_abort("Error more than one (%d) media would be changed ! aborting"%AC_util.con.total_changes)
#else: print '<a href="deleteMedia?ID=%d&Mdb=%s">delete</a> media %s'%(ID,AC_util.col_table,AC_util.col_table)
print '<form action=""><table>'
if 'run' in res:
	del res['run']
#print '<pre>%s</pre>'%res
af1 = True
for key in res:
	if (res[key] != None) or (key in mod_keys):
		if key in mod_keys:
			color = 'inherit'
			print '<tr><th>%s</th><td>'%key,
			if key in change:
				color = mod_color
				val = form[key].value
				print '%s<br>'%AC_util.dataOut(res[key])
			else:
				val = res[key]
			size = 20
			if type(val) in (str, unicode):
				if len(val) > 20:
					size = len(val)
			print '<input type="text" name="%s" value="%s" size="%d" style="background-color:%s"'\
			%(key, AC_util.dataOut(val),size,color),
			if af1:
				af1 = False
				print ' autofocus="true"',
			print '></td></tr>'
		else:
			print '<tr><th>%s</th><td>%s</td></tr>'%(key, AC_util.dataOut(res[key]))
print '</table>\n'
print '<input type="hidden" name="ID" value="%d">'%ID
print '<input type="hidden" name="Mdb" value="%s">'%Mdb
if CB_FS_OK :
	tmp=''
	if UPDT_FS or len(change) == 0:
		tmp=' checked'
	print '<input type="checkbox" name="UPDT_FS" value="True"%s>\
	 Do modify filesystem accordingly<br>'%tmp
if len(change) > 0 :
	CONFIRM = 'Confirm'
	print '<input type="hidden" name="CONFIRM" value="%s">'%CONFIRM
else:
	CONFIRM = ''
print '<input type="reset" value="Reset"> <input type="submit" value="%s Modify" /></form>'%CONFIRM
HTML_abort()
