#! /usr/bin/python
# -*- coding: iso-8859-1 -*-

#####################################################
#    Copyright (C) 2006 by Cesar Kallas   	
#    cesarkallas@soulivre.org   
#    http://cesarkallas.soulivre.org
#                                                                          
#    This program is free software; you can redistribute it and#or modify  
#    it under the terms of the GNU General Public License as published by 
#    the Free Software Foundation; either version 2 of the License, or     
#    (at your option) any later version.                                   
#                                                                          
#    This program is distributed in the hope that it will be useful,       
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         
#    GNU General Public License for more details.                          
#                                                                          
#    You should have received a copy of the GNU General Public License     
#    along with this program; if not, write to the                         
#    Free Software Foundation, Inc.,                                       
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             
#####################################################

import MySQLdb
import MySQLdb.cursors
import Log
import Ambiente

class Grupos(object):
	"""
		Classe que gerencia grupos virtuais
	"""
	
	def __init__(self):
		self.db = Ambiente.db
		
		# Inicia o log
		self.log = Log.Log("Grupos")
		self.log = self.log.get()



	def inseri(self, dicNovoGrupo):
		"""
		Inseri ou atualiza um novo grupo na base de dados
		Entrada: dicNovoGrupo = Dicionario com os campos de cadastro do grupo
		Retorno: 
			 1: concluido com sucesso
			-1: paramentro invalido, nao eh do tipo dicionario
			outras msgs = falta parametro, etc
			None: falha na insercao
		"""
		if isinstance(dicNovoGrupo, dict) != True:
			return -1
		
		if dicNovoGrupo.get("nome") == None:
			return "falta paramentro: 'nome'"
			
		if dicNovoGrupo.get("descricao") == None:
			dicNovoGrupo["descricao"] = ""
			
		if dicNovoGrupo.get("responsavel") == None:
			dicNovoGrupo["responsavel"] = ""
			
		if dicNovoGrupo.get("classe") == None:
			dicNovoGrupo["classe"] = ""
			
		try:
			# Inseri novo grupo
			self.db.execute("REPLACE INTO grupos \
				(nome, descricao, responsavel, classe) \
				values (%s, %s, %s, %s)",
				(dicNovoGrupo["nome"], dicNovoGrupo["descricao"], 
				dicNovoGrupo["responsavel"], dicNovoGrupo["classe"]))
			return 1
		except MySQLdb.Error, e:
			mysql_erro = "%d: %s" % (e.args[0], e.args[1])
			self.log.error(mysql_erro)
			return mysql_erro
		except Exception:
			self.log.error("ao cadastrar novo grupo")
			return None



	def remove(self, nome=None):
		"""
		Remove um grupo da base de dados
		Entrada: nome (Nome do grupo)
		Retorno:
			 1: concluido com sucesso
			None: falha na remocao
		"""
		
		if nome == None:
			return None
		
		try:
			self.db.execute("DELETE FROM grupos where nome = %s", nome)
			return 1
		except MySQLdb.Error, e:
			self.log.error("%d: %s" % (e.args[0], e.args[1]))
			return None



	def informacao(self, nome=None):
		"""
		Retorna todas as informacoes de um grupo
		Entrada: Nome do grupo
		Saida:
			OK: Informacoes do grupo
			None: para falha
		"""
		try:
			if nome == None:
				self.db.execute("""SELECT * FROM grupos""")
				return self.db.fetchall()
			else:
				self.db.execute("""SELECT * FROM grupos WHERE nome=%s""",  (nome))
				return self.db.fetchone()
		except MySQLdb.Error, e:
			self.log.error("%d: %s" % (e.args[0], e.args[1]))
			return -1


	def total(self):
		"""
			Retorna o numero de grupos cadastrados
			None: para falha
		"""
		try:
			self.db.execute("SELECT count(*) as total FROM grupos")
			return self.db.fetchone()
			
			
		except MySQLdb.Error, e:
			self.log.error("%d: %s" % (e.args[0], e.args[1]))
			return -1
