from __future__ import with_statement
from . import base
import logging
from xml.etree import cElementTree as ET
import copy

class xep_0086(base.base_plugin):
	"""
	XEP-0086 Error Condition Mappings
	"""

	def plugin_init(self):
		self.xep = '0086'
		self.description = 'Error Condition Mappings'
		self.error_map = {
			'bad-request':('modify','400'),
			'conflict':('cancel','409'),
			'feature-not-implemented':('cancel','501'),
			'forbidden':('auth','403'),
			'gone':('modify','302'),
			'internal-server-error':('wait','500'),
			'item-not-found':('cancel','404'),
			'jid-malformed':('modify','400'),
			'not-acceptable':('modify','406'),
			'not-allowed':('cancel','405'),
			'not-authorized':('auth','401'),
			'payment-required':('auth','402'),
			'recipient-unavailable':('wait','404'),
			'redirect':('modify','302'),
			'registration-required':('auth','407'),
			'remote-server-not-found':('cancel','404'),
			'remote-server-timeout':('wait','504'),
			'resource-constraint':('wait','500'),
			'service-unavailable':('cancel','503'),
			'subscription-required':('auth','407'),
			'undefined-condition':(None,'500'),
			'unexpected-request':('wait','400')
			}


	def makeError(self, condition, cdata=None, errorType=None, text=None, customElem=None):
		conditionElem = self.xmpp.makeStanzaErrorCondition(condition, cdata)
		if errorType is None:
			error = self.xmpp.makeStanzaError(conditionElem, self.error_map[condition][0], self.error_map[condition][1], text, customElem)
		else:
			error = self.xmpp.makeStanzaError(conditionElem, errorType, self.error_map[condition][1], text, customElem)
		error.append(conditionElem)
		return error