#!/usr/bin/python
import sys,os,string,time,shutil
data_dir=os.path.abspath(sys.argv[1]).rstrip('/')+'/'
movie_s=60 # max length of movie in seconds
framerate=25
movie_frames=movie_s*framerate
out_dir=data_dir.split('/')[-2]+'_short'
print 'Output directory:',out_dir
day=7,18 # helv -> almost everything
if not os.path.isdir(out_dir): os.mkdir(out_dir)

def scanDir(d):
 rl=[]
 for fn in os.listdir(d):
  if os.path.isdir(d+fn): rl+=scanDir(d+fn+'/')
  else: rl.append(d+fn)
 return rl

def is_day(t):
 h=int(time.strftime('%H',time.localtime(t)))
 if h>day[0] and h<day[1]: return True

getTime=lambda x : int(filter(lambda y : y in string.digits,os.path.basename(x)))
fSize=lambda x : int(os.stat(x)[6])
to_day=lambda x : time.strftime('%j',time.localtime(x))

files=scanDir(data_dir)
photos=filter(lambda x:x[-3:]=='jpg',files)
basename=os.path.splitext(os.path.basename(photos[0]))[0]
prefix=basename.replace(str(getTime(photos[0])),'')
print 'Prefix:',prefix
timeList=map(getTime,photos)
dayList=filter(is_day,timeList)
print '%d photos, %d during daytime' % (len(timeList),len(dayList))
daydict={}
for t in dayList:
 d=to_day(t)
 daydict[d]=daydict.get(d,[])+[t]
t1,t2=min(dayList),max(dayList)
print 'Start date: %s' % time.strftime('%Y-%m-%d',time.localtime(t1))
print 'End date: %s' % time.strftime('%Y-%m-%d',time.localtime(t2))
duration=(t2-t1)/(60*60*24)
print 'Duration in days: %d' % duration
frames_per_day=movie_frames/duration
print 'Frames per day:',frames_per_day
selected=[]
for k,v in sorted(daydict.items()):
 if len(v)<=frames_per_day: continue
 print k,len(v)
 sizelist=map(lambda x : fSize(data_dir+prefix+'%d.jpg'%x),v)
 timesize=zip(sizelist,v)
 timesize.sort()
 timesize.reverse()
 selected+=map(lambda x : '%s%s%d.jpg' % (data_dir,prefix,x[1]),timesize[:frames_per_day])
for s in selected: shutil.copy(s,out_dir)