#!/usr/bin/python

# created by Radek Podgorny <radek@podgorny.cz>
# version 1.1

# If you find this program useful, send me email or postcard to:
# Radek Podgorny
# Nad Kolonii 29
# Praha 4
# 140 00
# Czech Republic


import sys
import os
import time
import subprocess
import random


def sig(i):
	if i < 0: return -1
	elif i > 0: return 1
	else: return i


if len(sys.argv) < 7:
	print "You have to specify: slat slon tlat tlon scale tag [--download] [--overwrite] [--writetofile]"
	sys.exit(0)


#slat = 49.9389
#slon = 14.2170
#tlat = 50.1825
#tlon = 14.7129
#scale = 3950
#tag = "praha"

print sys.argv
slat = float(sys.argv[1])
slon = float(sys.argv[2])
tlat = float(sys.argv[3])
tlon = float(sys.argv[4])
scale = int(sys.argv[5])
tag = sys.argv[6]

download = False
if "--download" in sys.argv[6:]: download = True

overwrite = False
if "--overwrite" in sys.argv[6:]: overwrite = True

writetofile = False
if "--writetofile" in sys.argv[6:]: writetofile = True


scales = (3950, 3950*3, 3950*6, 3950*12, 3950*25, 3950*50, 3950*150, 3950*800, 3950*2000, 3950*7000, 3950*12000)

if scale not in scales:
	print "Invalid scale"
	print "Available scales are: ", scales
	sys.exit(0)
	
alt = scale / scales[0]

# swap coordinates if needed
if slat > tlat:
	tmp = tlat
	tlat = slat
	slat = tmp

if slon > tlon:
	tmp = tlon
	tlon = slon
	slon = tmp

# these values are stolen and adjusted to work best for me -- Radek Podgorny
k = scale * 0.0000028
klat = k * 0.8
klon = k * 1.2

# find the best stepping
mod = 0.000001
while (klat%mod)/klat < 0.1 and (klon%mod)/klon < 0.1: mod *= 10
mod *= 0.1

klat -= klat % mod
klon -= klon % mod

slat -= (abs(slat) % klat) * sig(slat)
slon -= (abs(slon) % klon) * sig(slon)


lat = slat
while lat <= tlat+klat:
	lon = slon
	while lon <= tlon+klon:
		filename = "map_expedia--" \
			+ tag \
			+ "--" \
			+ str(scale) \
			+ "--"

		if lat >= 0: filename += "+%(lat)07.3f" % {"lat":lat}
		else: filename += "%(lat)08.3f" % {"lat":lat}

		filename += "_"
		if lon >= 0: filename += "+%(lon)07.3f" % {"lon":lon}
		else: filename += "%(lon)08.3f" % {"lon":lon}

		filename += ".gif"

		skipped = False
		if download:
			if overwrite or not os.path.exists(filename):
				url = "http://www.expedia.com/pub/agent.dll?qscr=mrdt&ID=3XNsF." \
					+ "&CenP=" + str(lat) + "," + str(lon) \
					+ "&Lang=EUR0809&Alti=" + str(alt) \
					+ "&Size=1280,1024&Offs=0,0"

				subprocess.call(["wget", url, "-O", filename])
			else:
				print filename, "already downloaded"
				skipped = True

		if writetofile:
			print "Writing to file"
			f = open(tag + ".txt", "a")
			f.write(filename + " " + str(lat) + " " + str(lon) + " " + str(scale) + "\n")
			f.close()

		if download and not skipped:
			sleep = random.randint(1, 20)
			while sleep > 0:
				print sleep
				time.sleep(1)
				sleep -= 1

		lon += klon
	lat += klat
