#!/usr/bin/python2
# -*- coding: UTF-8 -*-

## script to display diplicated textures in mods and subgame
## by Crabman
## ./find_duplicate_textures.py /path_to_/minetest-minetestforfun-server or ../../path_to_/minetest-minetestforfun-server or ../../

import sys, os, glob

def format_center(string, lt):
	# "     string     " lt=string total
	return (('{:^%s}' % lt).format(string) )

def format_left(string, lt):
	# "string     "   lt=string total
	return (('{:<%s}' % lt).format(string) )

def format_right(string, lt):
	# "     string"   lt=string total
	return (('{:>%s}' % lt).format(string) )


class Textures:
	def __init__(self):
		self.textures_list = dict()
		self.duplicated = 0
	
	def get_duplicate_nb(self):
		return self.duplicated
	
	def get_nb(self):
		return len(self.textures_list)
	
	def set_textures(self, files):
		for texture in files:
			path, name = os.path.split(texture)
			if self.textures_list.has_key(name):
				if len(self.textures_list[name]) == 1:
					self.duplicated += 1
				self.textures_list[name].append(path)
			else:
				self.textures_list[name] = [path]
	
	def show_duplicate(self):
		for t, l in self.textures_list.iteritems():
			nb = len(l)
			if nb > 1:
				print("%s: %s %s" % (nb, format_left(t, 40), l) )


if __name__ == "__main__":
	if len(sys.argv) <=1:
		print("Missing arg path!")
		sys.exit(1)
	
	if sys.argv[1].startswith("/"):
		dir_path = sys.argv[1]
	else:
		dir_path = os.path.join(os.getcwd(), sys.argv[1])
	
	try:
		os.chdir(dir_path)
	except Exception as err:
		print(err)
		sys.exit(1)
	
	T = Textures()
	# find in subgame/mods and mods
	for f in ["*/mods", "mods"]:
		files = glob.glob( os.path.join(f,'*/textures/*.png') ) # find in mods
		T.set_textures(files)
		files = glob.glob( os.path.join(f,'*/*/textures/*.png') ) # find in modpack
		T.set_textures(files)
	print("%s textures total    %s duplicated\n" % ( T.get_nb(), T.get_duplicate_nb() ) )
	T.show_duplicate()