# saves an image to the filesystem based
# on the given parameters and returns two things:
# 		1. True/False (if the file was successfully saved or not)
#		2. The filename used in saving the file
def save_image(img_file, upload_folder, allowed_extensions=None, img_name_prefix=None, img_name_suffix=None):
	from werkzeug import secure_filename
	from base_form import config

	# retrieve and secure filename
	img_name = img_file.filename
	img_name = secure_filename(img_name)
	

	# get image allowed extensions config from forms
	allowed_extensions = config.get('IMG_ALLOWED_EXTENSIONS', ['JPG', 'JPEG', 'PNG'])


	# get filename and extension
	if '.' in img_name:
		name_extension_split = img_name.rsplit('.', 1)
		name, ext = name_extension_split[0], name_extension_split[1]

	else:
		return False, img_name


	# ensure file format is valid
	if ext not in allowed_extensions:
		return False, img_name
	

	# generate new name for image
	new_name = get_random_string(n=4)
	img_name = new_name
	

	# add img_name_prefix and img_name_suffix if any
	if img_name_prefix is None:
		img_name_prefix = ''

	if img_name_suffix is None:
		img_name_suffix = ''

	# join all parts of filename (including file extension)
	img_name = ''.join([img_name_prefix, new_name, img_name_suffix, '.', ext])


	
	# some file checks and ops
	import os
	from distutils.dir_util import mkpath, DistutilsFileError
	
	# create upload_folder if doesn't already exist
	try:
		mkpath(upload_folder)
	except DistutilsFileError:
		print("DistutilsFileError: Couldn't create folder to store image.")
		return False, img_name
	
	
	# check if filename is existing
	filelist = os.listdir(upload_folder)
	while True:
		if img_name in filelist:
			name, ext = os.path.splitext(img_name)
			img_name = ''.join([name, '_', get_random_string(n=3), ext])
			
		if img_name not in filelist:
			break

	
	# finally, save image file with "img_name" to "upload_folder"
	img_file.save(os.path.join(upload_folder, img_name))
	print "IMAGE SAVED TO %r " %os.path.abspath(os.path.join(upload_folder, img_name))      	####DEBUG
	return True, img_name