import os, sys, shutil, httplib, zipfile

name = "teeworlds"
domain = "www.%s.com" % name
version = sys.argv[1]

bam_version = "bam-0.2.0"

flag_download = True
flag_clean = True

if os.name == "nt":
	platform = "win32"
else:
	# get name
	osname = os.popen("uname").readline().strip().lower()
	if osname == "darwin":
		osname = "osx"
		
	# get arch
	machine = os.popen("uname -m").readline().strip().lower()
	arch = "unknown"
	
	if machine[0] == "i" and machine[2:] == "86":
		arch = "x86"
	elif machine == "x86_64":
		arch = "x86_64"
	elif "power" in machine.lower():
		arch = "ppc"
		
	platform = osname + "_" + arch

print "%s-%s-%s" % (name,version, platform)

src_package = "%s-%s-src.zip" % (name, version)

root_dir = os.getcwd() + "/work"
src_dir = ""

def fetch_file(server, url, local):
	try:
		conn = httplib.HTTPConnection(server)
		print "trying %s%s" % (server, url)
		conn.request("GET", url)
		response = conn.getresponse()
		if response.status != 200:
			return False
		
		f = file(local, "wb")
		f.write(response.read())
		f.close()
		conn.close()
		return True
	except:
		pass
	return False

def unzip(filename, where):
	z = zipfile.ZipFile(filename, "r")
	for name in z.namelist():
		try: os.makedirs(where+"/"+os.path.dirname(name))
		except: pass
		
		try:
			f = file(where+"/"+name, "wb")
			f.write(z.read(name))
			f.close()
		except: pass
		
	z.close()


def path_exist(d):
	try: os.stat(d)
	except: return False
	return True

def bail(reason):
	print reason
	os.chdir(root_dir)
	sys.exit(-1)

# clean
if flag_clean:
	print "*** cleaning ***"
	try: shutil.rmtree("work")
	except: pass
	
# make dir
try: os.mkdir("work")
except: pass

# change dir
os.chdir(root_dir)

# download
if flag_download:
	print "*** downloading bam source package ***"
	if not fetch_file(domain, "trac/bam/browser/releases/"+bam_version+".zip?format=raw", "bam.zip"):
			bail("couldn't find source package and couldn't download it")
		
	print "*** downloading %s source package ***" % name
	if not fetch_file(domain, "/files/%s" % src_package, src_package):
		if not fetch_file(domain, "/files/beta/%s" % src_package, src_package):
			bail("couldn't find source package and couldn't download it")

# unpack
print "*** unpacking source ***"
unzip("bam.zip", ".")
unzip(src_package, name)
src_dir = name+"/"+ os.listdir(name+"/")[0]

# build bam
if 1:
	print "*** building bam ***"
	os.chdir(bam_version)
	output = "bam"
	bam_cmd = "./bam"
	if os.name == "nt":
		if os.system("make_win32_msvc.bat") != 0:
			bail("failed to build bam")
		output += ".exe"
		bam_cmd = "bam"
	else:
		if os.system("sh make_unix.sh") != 0:
			bail("failed to build bam")
	os.chdir(root_dir)
	shutil.copy(bam_version+"/src/"+output, src_dir+"/"+output)

# build the game
if 1:
	print "*** building %s ***" % name
	os.chdir(src_dir)
	if os.system("%s server_release client_release" % bam_cmd) != 0:
		bail("failed to build %s" % name)
	os.chdir(root_dir)

# make release
if 1:
	print "*** making release ***"
	os.chdir(src_dir)
	if os.system("python scripts/make_release.py %s %s" % (version, platform)) != 0:
		bail("failed to make a relase of %s"%name)
	final_output = "FAIL"
	for f in os.listdir("."):
		if version in f and platform in f and name in f and (".zip" in f or ".tar.gz" in f):
			final_output = f
	os.chdir(root_dir)
	shutil.copy("%s/%s" % (src_dir, final_output), "../"+final_output)

print "*** all done ***"

		
