import time
import gzip
import shutil
import hashlib
from django.core.exceptions import ValidationError

def format_pace_tick(x,pos=None):
        min=int(x/60)
	sec=int(x-min*60.)
	sec_str=str(sec).zfill(2)
	template='%d:%s'
	return template % (min,sec_str)

def format_time_tick(x,pos=None):
	hour=int(x/3600)
	min=int((x-hour*3600.)/60)
	min_str=str(min).zfill(2)
	template='%d:%s'
	return template % (hour,min_str)

def format_pace(x,pos=None):
    if isinf(x) or isnan(x):
	x=0
	
    min=int(x/60)
    sec=(x-min*60.)

    str1 = "{min:0>2}:{sec:0>4.1f}".format(
	min = min,
	sec = sec
	)

    return str1

def format_time(x,pos=None):


    min = int(x/60.)
    sec = int(x-min*60)

    str1 = "{min:0>2}:{sec:0>4.1f}".format(
	min=min,
	sec=sec,
	)

    return str1

def validate_image_extension(value):
        import os
        ext = os.path.splitext(value.name)[1].lower()
        valid_extension = ['.jpg','.jpeg','.png','.gif']

        if not ext in valid_extension:
                raise ValidationError(u'File not supported')

def validate_file_extension(value):
  import os
  ext = os.path.splitext(value.name)[1]
  valid_extensions = ['.tcx','.csv','.TCX',
                      '.CSV','.fit','.FIT','.zip','.ZIP',
                      '.gz','.GZ','.xls']
  if not ext in valid_extensions:
    raise ValidationError(u'File not supported!')

def must_be_csv(value):
    import os
    ext = os.path.splitext(value.name)[1]
    valid_extensions = ['.csv','.CSV']
    if not ext in valid_extensions:
	raise ValidationError(u'File not supported!')
    
def validate_kml(value):
    import os
    ext = os.path.splitext(value.name)[1]
    valid_extensions = ['.kml','.KML']
    if not ext in valid_extensions:
	raise ValidationError(u'File not supported!')
    

def handle_uploaded_image(i):
        import StringIO
        from PIL import Image, ImageOps, ExifTags
        import os
        from django.core.files import File
        image_str = ""
	for chunk in i.chunks():
                image_str += chunk

        imagefile = StringIO.StringIO(image_str)
        
                
        image = Image.open(i)

        try:
                for orientation in ExifTags.TAGS.keys():
                        if ExifTags.TAGS[orientation]=='Orientation':
                                break
                exif=dict(image._getexif().items())

        except (AttributeError, KeyError, IndexError):
                # cases: image don't have getexif
                exif = {'orientation':0}
        
        if image.mode not in ("L", "RGB"):
                image = image.convert("RGB")

        basewidth = 600
        wpercent = (basewidth/float(image.size[0]))
        hsize = int((float(image.size[1])*float(wpercent)))
        image = image.resize((basewidth,hsize), Image.ANTIALIAS)

        if exif[orientation] == 3:
                image=image.rotate(180, expand=True)
        elif exif[orientation] == 6:
                image=image.rotate(270, expand=True)
        elif exif[orientation] == 8:
                image=image.rotate(90, expand=True)

        filename = hashlib.md5(imagefile.getvalue()).hexdigest()+'.jpg'

        filename2 = os.path.join('static/plots/',filename)
        image.save(filename2,'JPEG')
        
        return filename,filename2
                

def handle_uploaded_file(f):
    fname = f.name
    timestr = time.strftime("%Y%m%d-%H%M%S")
    fname = timestr+'-'+fname
    fname2 = 'media/'+fname
    with open(fname2,'wb+') as destination:
	for chunk in f.chunks():
	    destination.write(chunk)
            
    return fname,fname2

