#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Image,shutil,os,sys

def installFlashMapTo(file):
    # generated with : print open("flashmap.swf","rb").read().encode("base64")
    h="""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"""
    open(file,"wb").write(h.decode("base64"))

def makeMap(file,folder):
    WIDTH,HEIGHT=160,120
    if os.path.isdir(folder): shutil.rmtree(folder)
    os.makedirs(os.path.join(folder,"map"))

    # generate tiles "map/mapX.jpg"
    im=Image.open( file )
    w,h=im.size
    print "Create map '%s' (%dx%d) : "%(folder,w,h),
    n=0
    for r,y in enumerate(range(0,h,HEIGHT)):
        for c,x in enumerate(range(0,w,WIDTH)):
            im.crop((x,y,x+WIDTH,y+HEIGHT)).save(os.path.join(folder,"map","map%d.jpg"%n))
            n+=1

    # generate "map/mapconfig.txt"
    open(os.path.join(folder,"map","mapconfig.txt"),"w").write(
                            "&rows=%d&cols=%d&startat=0" % (r+1,c+1))
    print "-> %d tiles" % n

    # generate "flashmap.swf viewer"
    installFlashMapTo(os.path.join(folder,"view.swf"))



if __name__ == "__main__":
    if len(sys.argv)<2:
        print "USAGE: d2flashmap <image> [<image> ...]"
    else:
        for file in sys.argv[1:]:
            if os.path.isfile(file):
                name,ext= os.path.splitext(file)
                makeMap(file,"D2MAP_"+name)
            else:
                print "can't find :",(file)
