"""
    SleekXMPP: The Sleek XMPP Library
    Copyright (C) 2010  Nathanael C. Fritz
    This file is part of SleekXMPP.

    See the file LICENSE for copying permission.
"""
from .. xmlstream.stanzabase import registerStanzaPlugin, ElementBase, ET

class Error(ElementBase):
	namespace = 'jabber:client'
	name = 'error'
	plugin_attrib = 'error'
	conditions = set(('bad-request', 'conflict', 'feature-not-implemented', 'forbidden', 'gone', 'internal-server-error', 'item-not-found', 'jid-malformed', 'not-acceptable', 'not-allowed', 'not-authorized', 'payment-required', 'recipient-unavailable', 'redirect', 'registration-required', 'remote-server-not-found', 'remote-server-timeout', 'resource-constraint', 'service-unavailable', 'subscription-required', 'undefined-condition', 'unexpected-request'))
	interfaces = set(('code', 'condition', 'text', 'type'))
	types = set(('cancel', 'continue', 'modify', 'auth', 'wait'))
	sub_interfaces = set(('text',))
	condition_ns = 'urn:ietf:params:xml:ns:xmpp-stanzas'
	
	def setup(self, xml=None):
		if ElementBase.setup(self, xml): #if we had to generate xml
			self['type'] = 'cancel'
			self['condition'] = 'feature-not-implemented'
		if self.parent is not None:
			self.parent()['type'] = 'error'
	
	def getCondition(self):
		for child in self.xml.getchildren():
			if "{%s}" % self.condition_ns in child.tag:
				return child.tag.split('}', 1)[-1]
		return ''
	
	def setCondition(self, value):
		if value in self.conditions:
			for child in self.xml.getchildren():
				if "{%s}" % self.condition_ns in child.tag:
					self.xml.remove(child)
			condition = ET.Element("{%s}%s" % (self.condition_ns, value))
			self.xml.append(condition)
		return self
	
	def delCondition(self):
		return self
	
	def getText(self):
		text = ''
		textxml = self.xml.find("{urn:ietf:params:xml:ns:xmpp-stanzas}text")
		if textxml is not None:
			text = textxml.text
		return text
	
	def setText(self, value):
		self.delText()
		textxml = ET.Element('{urn:ietf:params:xml:ns:xmpp-stanzas}text')
		textxml.text = value
		self.xml.append(textxml)
		return self
	
	def delText(self):
		textxml = self.xml.find("{urn:ietf:params:xml:ns:xmpp-stanzas}text")
		if textxml is not None:
			self.xml.remove(textxml)