import os, imp, logging
from configparser import ConfigParser
from os.path import expanduser

CONFFILENAME="simtoolkitrc"

logger = logging.getLogger("simtoolkit.__config__")
def readconf(rc,dic=None):
	config = ConfigParser()
	config.optionxform=str
	try:
		config.read( rc )
	except BaseException as e:
		raise ValueError("Config Parser returns an error\'{}\'".format(e))
	if dic is None:
		dic={}
	elif not type(dic) is dict:
		raise TypeError("Incorrect dictionary type")
	for section in config.sections():
		if not section in dic:
			dic[section]={}
		elif not type(dic[section]) is dict:
			raise TypeError("Section {} in dictionary is not a dictionary")
		for option in config.options(section):
			dic[section][option] = config.get(section,option)
			
	return dic
		
		
_config = {
	'GENERAL':{
		'editor' : 'nano',
	},
}


loc = ["/etc/","/usr/local/etc/"]
try:
	_,stkloc,_ = imp.find_module('simtoolkit')
	loc.append(stkloc+"/")
except BaseException as e: pass
try:
	_,cnfloc,_ = imp.find_module('__config__')
	loc.append(os.path.dirname(cnfloc)+"/")
except BaseException as e: pass

loc.append( expanduser("~")+"/." )
loc.append( expanduser("~/.config/") )
loc.append( expanduser("~/.config/simtoolkit/") )
loc.append("./.")

#DB>>
#print(loc)
#for l in loc:
#    print(l,l+CONFFILENAME,os.access(l+CONFFILENAME, os.R_OK))
#<<DB

for l in loc:
	if os.access(l+CONFFILENAME, os.R_OK):
		logger.debug("Reading {}".format(l+"/"+CONFFILENAME))
		_config = readconf(l+CONFFILENAME, _config)

from .tree import tree as tr
stk_config = tr()
for n in _config:
	stk_config[n] = _config[n]