#!/usr/bin/python
# -*- coding: utf-8 -*-

import os.path
import ConfigParser

class Config():
	"""Classe contenant la configuration"""
	def __init__(self):
		self.read_file()
	
	def read_file(self):
		"""Récupère la configuration du fichier SynApps.ini"""
		self.infos = {}
		if os.path.isfile("SynApps.ini"):
			self.config = ConfigParser.ConfigParser()
			self.config.read('SynApps.ini')
		else:
			self.writeDefault()
		
		self.infos['Display'] = {}
		
		self.infos['Display']['DisplayInstalled'] = self.readBool('Display', 'DisplayInstalled')
		self.infos['Display']['DisplayUninstalled'] = self.readBool('Display', 'DisplayUninstalled')
		
		self.infos['SynApps'] = {}
		
		self.infos['SynApps']['AppsPath']  = self.readStr('SynApps', 'AppsPath', '../../../Apps')
		
		self.infos['Data'] = {}
		
		self.infos['Data']['Version'] = "0.1 alpha 3"
	
	def writeDefault(self):
		"""Crée le fichier SynApps.ini avec la configuration par défaut"""
		self.write({'Display': {'DisplayInstalled': True, 'DisplayUninstalled': True}, 'SynApps': {'AppsPath':'../../../Apps'}})
		
	def write(self, infos = None):
		"""Crée le fichier SynApps.ini"""
		if infos == None:
			infos = self.infos
			
		self.config = ConfigParser.RawConfigParser()
		
		for section in infos.keys():
			if section != "Data":
				if not self.config.has_section(section):
					self.config.add_section(section)
				for element in infos[section].keys():
					self.config.set(section, element, infos[section][element])
		
		self.config.write(open('SynApps.ini', 'wb'))
	
	def readStr(self, section, element, default = ""):
		"""Récupère une chaîne"""
		try:
			return self.config.get(section, element)
		except:
			return default
	
	def readBool(self, section, element, default = True):
		"""Récupère un booléen"""
		try:
			bool = self.config.get(section, element)
			return self.strToBool(bool, default)
		except:
			return default
	
	def strToBool(self, str, default = True):
		"""Convertie une chaîne en booléen"""
		if str == False or str == "False" or str == "false" or str == "0" or str == 0:
			return False
		elif str == True or str == "True" or str == "true" or str == "1" or str == 1:
			return True
		else:
			return default
		
	def get(self, section = None, element = None):
		"""Renvoie l'information passée en paramètres.
		   Si element = None, renvoie la section.
		   Si section = None, renvoie la configuration."""
		if section is None:
			return self.infos
		else:
			if element is None:
				return self.infos[section]
			else:
				return self.infos[section][element]
	
	def set(self, section, element, value):
		"""Modifie la valeur d'une information"""
		self.infos[section][element] = value
		self.write()