from django.db import models
from django.db.models.signals import post_delete
from django.dispatch.dispatcher import receiver
from django.contrib.auth.models import User

from django.utils.encoding import smart_str, smart_unicode

import uuid
import pdb
import os

# Create your models here.
#class User(models.Model):
#	username=models.CharField(max_length=200)
#	password=models.CharField(max_length=200)
#	name=models.CharField(max_length=200)
#	email=models.CharField(max_length=300)

def get_upload_path(instance, filename):
	extension = os.path.splitext(filename)[1]
	return "./{0}{1}".format(uuid.uuid4(), extension)
	
class Session(models.Model):
	owner=models.ForeignKey(User, on_delete=models.CASCADE)
	key = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
	description=models.CharField(max_length=5000, default='', blank=True, null=True)
	name=models.CharField(default='', max_length=5000)
	#aoi=models.ImageField(upload_to=get_upload_path)
	
	shared=models.ManyToManyField(User, related_name='shared_with', blank=True)
	
	confirmation=models.IntegerField(default=0, editable=False)
	
	def __unicode__(self):
		return 'Session: ' + smart_str(self.key) + ' (' + self.owner.username + ', ' + self.name + ')'

#@receiver(pre_delete, sender=Session)
#def session_delete(sender, instance, **kwargs):
	#Pass false so FileField doesn't save the model.
	#instance.aoi.delete(False)	

class AOI(models.Model):
	session=models.ForeignKey(Session, on_delete=models.CASCADE)
	file=models.ImageField(default='', upload_to=get_upload_path)
	duration=models.IntegerField(default=10000)

@receiver(post_delete, sender=AOI)
def aoi_delete(sender, instance, **kwargs):
	# Pass false so FileField doesn't save the model.
	instance.file.delete(False)
	
	#dirpath = os.getcwd() + os.path.dirname(instance.file.url).replace('/', '\\')
	#filepath = os.getcwd() + instance.file.url.replace('/', '\\')
	
	#os.remove(filepath)
	#os.rmdir(dirpath)

	
class Tracking(models.Model):
	session=models.ForeignKey(Session, on_delete=models.CASCADE)
	width = models.IntegerField(default=0)
	height = models.IntegerField(default=0)
	file = models.FileField(default='', blank = True)
	quality = models.FloatField(default=0)
	aois = models.ManyToManyField(AOI, through='AoiPosition')
	
	def __unicode__(self):
		return 'Tracking ' + str(self.id) + ' (' + smart_str(self.session.key) + ')'

@receiver(post_delete, sender=Tracking)
def tracking_delete(sender, instance, **kwargs):
	instance.file.delete(False)

class AoiPosition(models.Model):
	tracking = models.ForeignKey(Tracking, on_delete=models.CASCADE)
	aoi = models.ForeignKey(AOI, on_delete=models.CASCADE) 
	x = models.IntegerField(default=0)
	y = models.IntegerField(default=0)
	width = models.IntegerField(default=0)
	height = models.IntegerField(default=0)
	
	def as_json(self):
		return dict(key = self.aoi.id, x = self.x, y = self.y, width = self.width, height = self.height)
	
#class Gaze(models.Model):
#	tracking=models.ForeignKey(Tracking, on_delete=models.CASCADE)
#	x=models.FloatField()
#	y=models.FloatField(); 
#	quality = models.FloatField(default=0)
#	
#	gender=models.IntegerField(default=0);
#	emo_anger = models.FloatField(default=0)
#	emo_disgust = models.FloatField(default=0)
#	emo_fear = models.FloatField(default=0)
#	emo_happy = models.FloatField(default=0)
#	emo_sadness = models.FloatField(default=0)
#	emo_surprise = models.FloatField(default=0)
#		
#	def as_json(self):
#		return dict(id=self.id, x=self.x, y=self.y, 
#			gender = self.gender, 
#			anger = self.emo_anger, 
#			disgust = self.emo_disgust, 
#			fear = self.emo_fear, 
#			happy = self.emo_happy, 
#			sadness = self.emo_sadness,
#			surprise = self.emo_surprise)	
			
	
