from django import forms
from django.core.exceptions import ValidationError
import re
from decimal import Decimal, InvalidOperation

#class CurrencyField(forms.IntegerField):
#	default_error_message = {
#		'invalid': _(u'Enter a number.'),
#	}
#	def __init__(self, positive=True, *args, **kwargs):
#		super(IntegerField, self).__init__(*args, **kwargs)
#		self.positive = positive
#	def to_python(self, value):
#		value = super(IntegerField, self).to_python(value)
#		if value in validators.EMPTY_VALUES:
#			return None
#		try:
#			value = float(value.replace(",", "."))
#		except:
#			pass

class CurrencyInput (forms.TextInput):
	def render(self, name, value, attrs=None):
		if value != '':
			try:
				value = u"%.2f" % value
			except TypeError:
				pass
			return super(CurrencyInput, self).render(name, value, attrs)


class CurrencyField (forms.RegexField):
	""" Represents a currency field for django forms... or something. """
	widget = CurrencyInput
	currencyRe = re.compile(r'^[0-9]{1,5}([,\.][0-9][0-9]?)?$')

	#currencyRe = re.compile(r'^[0-9]{1,5}(.[0-9][0-9]?)?$')
#	currencyRe = re.compile(r"^[0-9]")
	def __init__(self, *args, **kwargs):
		super(CurrencyField, self).__init__(
			self.currencyRe, None, None, *args, **kwargs)

#class CurrencyField(forms.FloatField):
#	widget = CurrencyInput
#	moneyre = re.compile(r"^[0-9]{1,5}([\.][0-9][0-9])?$")
#	def __init__(self, positive=False, allowPerCent=False, *args, **kwargs):
#		super(forms.FloatField, self).__init__(*args, **kwargs)
#		self.positive = positive
#		self.allowPerCent = allowPerCent
	def to_python(self, value):
		#return super(forms.FloatField, self).to_python(value)
		#raise ValidationError("WTF WTF WTF %s " % value)
		#value = value.replace(",", ".")
		#try:
		#	value = super(forms.FloatField, self).to_python(value)
		#except ValidationError, e:
		#	raise NotImplementedError("%s %s" % (e, value))
		#return value
		value = value.replace(",", ".")
		try:
			value = Decimal(value)
		except (ValueError, TypeError, InvalidOperation):
			raise ValidationError("Bitte gib eine Zahl ein")
#		if not self.allowPerCent:
#			tmpval = 100.0*value
#			if tmpval == int(tmpval):
#				raise ValidationError("Deine Zahl sollte nicht mehr als zwei Nachkommastellen haben. %s %s %s" % (tmpval, int(tmpval), tmpval-int(tmpval)))
#		if self.positive and self.value < 0.0:
#			raise ValidationError("Bitte gib eine positive Zahl an.")
		return value
	def clean(self, value):
		value = super(CurrencyField, self).clean(value)
		return Decimal(value)
