#!/usr/bin/python -tt

# -*- coding: utf-8 -*-
import cgi, os
import cgitb; cgitb.enable()

import json
import random
import time
import sys
import shutil
from datetime import datetime
import base64
from urlparse import urlparse

form = cgi.FieldStorage()

if form.has_key('data') or form.has_key('url') or form.has_key('web_data'):
	id = random.randint(0, 999999999999)

	fileWriteTemp = '/scratch/memcnn_daemon/tasks/{0}t'.format(id)
	fileWriteImage = '/scratch/memcnn_daemon/tasks/{0}i'.format(id)

	if form.has_key('data') and form['data'].value:
		head, data = form['data'].value.split(',', 1)
		plaindata = base64.b64decode(data);
		open(fileWriteTemp, 'wb').write(plaindata)
		#open(fileWriteTemp, 'wb').write(form['data'].file.read())
	elif form.has_key('web_data') and form['web_data'].filename:
		open(fileWriteTemp, 'wb').write(form['web_data'].file.read())
	else:
		fileurl  = form['url'].value
		text_file = open(fileWriteTemp, "w")
		text_file.write("%s"%fileurl)
		text_file.close()

	shutil.move(fileWriteTemp,fileWriteImage);
	os.chmod(fileWriteImage, 0777)

	# os.chmod(fileWrite, 0777)

	# fileJSONObject = '/scratch/SUNapi/tasks/{0}o.json'.format(id)
	fileMemScore = '/scratch/memcnn_daemon/tasks/{0}i.dat'.format(id)

	# extra logging
	fileWriteImageMove = '/scratch/memcnn_daemon/upload/{0}i'.format(id)
	fileMemScoreMove = '/scratch/memcnn_daemon/upload/{0}i.dat'.format(id)
	fileInfo = '/scratch/memcnn_daemon/upload/{0}s.txt'.format(id)
	if form.has_key('data') and form['data'].value:
		infoTxt  = form['random'].value
	elif form.has_key('web_data') and form['web_data'].filename:
		infoTxt = form['web_data'].filename
	else:
		infoTxt  = form['url'].value
	text_file = open(fileInfo, "w")
	text_file.write("%s\n"%infoTxt)
	text_file.write("%s\n"%cgi.escape(os.environ["REMOTE_ADDR"]))
	text_file.write("%s"%str(datetime.now()))
	text_file.close()

	time.sleep(0.5)

	#while not os.path.exists(fileJSONObject):
	#	time.sleep(0.2)

	while not os.path.exists(fileMemScore):
		time.sleep(0.2)

	json_data=open(fileMemScore)
	data = json.load(json_data)
	json_data.close()

	#mem_data=open(fileMemScore)
	#data = mem_data.read();
	#mem_data.close()

	#data['filename'] = '{0}s'.format(id)

	# merge object: http://byatool.com/lessons/simple-property-merge-for-python-objects/
	#for property in dataScene.__dict__:
	#	if not callable(dataScene.__dict__[property]) and not hasattr(data, property):
	#		setattr(data, property, getattr(dataScene, property))

	#for k in dataScene:
	#	if k not in data:
	#		data[k] = dataScene[k]

	# delete both files
	#os.remove(fileWriteObject)
	#os.remove(fileJSONObject)

	#os.remove(fileWriteScene)
	#os.remove(fileJSONScene)
	shutil.move(fileWriteImage,fileWriteImageMove);
	shutil.move(fileMemScore,fileMemScoreMove);

	print "Content-Type: text/html"     # HTML is following
	print                               # blank line, end of headers

	print json.dumps(data)
	
else:
	print "Content-Type: text/html"     # HTML is following
	print                               # blank line, end of headers
	print "<h2>Incorrect function use</h2>"
	print "<p><strong>Correct usage:</strong> <a href='http://memorability.csail.mit.edu/cgi-bin/image.py?url=http://memorability.csail.mit.edu/demo/1.jpg'>http://memorability.csail.mit.edu/cgi-bin/image.py?url=http://memorability.csail.mit.edu/demo/1.jpg</a></p>"
	print "Please <a href='http://memorability.csail.mit.edu'>click here</a> to return to the main page."

