#!/usr/bin/env python

import sys, os, cgi, re #, tempfile
import tools

import cgitb; cgitb.enable(display=0, logdir='/tmp')

from cgitools import *

error_msg = []
form_params = {} # accept params from web users

necessary_data = {'cannot be empty':['intensity_file'], 'cannot be zero':[]}

data_user_str = ['intensity_file', 'request_name']
data_user_int = ['ave_num']
data_user_float = ['sig_level']
data_user_logic = ['plotPCA', 'plotAF', 'plotAFD', 'plotHK']

# Retrieve data from user
form = cgi.FieldStorage()

for name_html in data_user_str:
	if form.has_key(name_html): 
		a = form.getvalue(name_html)
		if type(a) == type(''): a = a.strip()
		else: # should be a seq
			a = map(lambda b:b.strip(), a)
		form_params[name_html] = a
for name_html in data_user_int:
	if form.has_key(name_html): form_params[name_html] = int(form.getvalue(name_html))

for name_html in data_user_logic:
	if form.has_key(name_html):
		form_params[name_html] = True
	else: form_params[name_html] = False
for name_html in data_user_float:
	if form.has_key(name_html): 
		v = form.getvalue(name_html).strip()
		if v and v[-1]=='%': 
			form_params[name_html] = float(v[:-1])*0.01
		else:
			form_params[name_html] = float(v)


# Check validation of form data here
if form_params['request_name'] and not re.match(r'^[a-zA-Z0-9_]+$', form_params['request_name']): error_msg.append('Error: Invalid characters in the user ID!<br>') 
#if not form_params.get('intensity_file', ''): exitWithInfo('No Data File!')

for tp, names in necessary_data.items():
	for name in names:
		if not form_params[name]: error_msg.append(name + ' ' + tp + '!<br>')

if error_msg: 
	error_msg.append('<p><A href ="javascript:history.go(-1)" >Please correct it</a>')
	exitWithInfo('<br>'.join(error_msg))

# prepare necessary directories.
result_subdirs = prepareResultDirs(form_params['request_name'])
req_name = os.path.basename(os.path.normpath(result_subdirs['request']['name_full']))

form_params['intensity_file'] = os.path.join(data_subdirs['intensity']['name_full'], form_params['intensity_file'])
form_params['output_dir'] = result_subdirs['request']['name_full']
form_params['chart_dir'] = result_subdirs['chart']['name_full']


n = saveReq(TYPE_NORMPCA, req_name, form_params, username)
if not n: exitMsg('An error ocurred when accessing database!<p><A href ="javascript:history.go(-1)" >Go back</a>')

print cgi_token
if 0:#n < 1: # failed
	print 'Error occurs when summit requests to database!'
else: 
	print 'Request ("%s") submitted!' % req_name
	tellDaemon('New requests')

#print form, '<p>form_params:<br>'
#for k,v in form_params.items(): print k, '----', v,'<br>'
#print '<p>user_params:<br>'
#for k,v in user_params.items(): print k, '----', v,'<br>'


