#!/usr/bin/python
import os,Image
camdir='/mnt/max/nick/cams'
mergedir='/mnt/max/nick/cams/baeren_merged'
#order=[1,6,7,2,3,4]
#order=[2,6,7,1,3,4]
#colnum=3
order=[6,7,3,4]
colnum=2
path=lambda x : '%s/baerenpark%d/' % (camdir,x)
zahlen=map(str,range(10))
ut=lambda fn :int(filter(lambda x:x in zahlen,os.path.basename(fn)))

def cutout(i):
 try: r=i.crop((0,16,i.size[0]-10,i.size[1]-2))
 except: return False
 return r

def find_nearest(pf,t):
 mindif,minimg=1e10,False
 for fi in os.listdir(pf):
  dif=abs(ut(fi)-t)
  if dif<mindif: mindif=dif; minimg=fi
 return minimg

def find_max_files():
 maxn,maxo=0,0
 for o in order:
  n=len(os.listdir(path(o)))
  if n>maxn: maxn=n; maxo=o
 print 'Maximal number of files: %s' % path(maxo)
 return maxo

if not os.path.isdir(mergedir): os.mkdir(mergedir)
maxo=find_max_files()
p1=path(maxo)
for f in sorted(os.listdir(p1)):
 ofn='%s/bm%d.jpg' % (mergedir,ut(f) )
 if os.path.isfile(ofn): continue
 im1=Image.open(p1+f)
 im1c=cutout(im1)
 assert im1c
 size=(im1c.size[0]*colnum,im1c.size[1]*2)
 imo=Image.new('RGB',size,'white')
 idx=order.index(maxo)
 px,py=(idx%colnum)*im1c.size[0],(idx/colnum)*im1c.size[1]
 imo.paste(im1c,(px,py))
 for o in order:
  if o==maxo: continue
  nfn=find_nearest(path(o),ut(f))
  imi=Image.open(path(o)+nfn)
  imic=cutout(imi)
  while not imic:
   print 'Deleted %s' % nfn
   os.unlink(path(o)+nfn)
   nfn=find_nearest(path(o),ut(f))
   imic=cutout(imi)
  idx=order.index(o)
  px,py=(idx%colnum)*im1c.size[0],(idx/colnum)*im1c.size[1]
  imo.paste(imic,(px,py))
 imo.save(ofn)
 print 'Saved %s' % ofn