# -*- coding: utf-8 -*-
import yaml

class Figure(object):

    def __init__(self, value, unit):
        self.value = value
        self.unit = unit

    def get_value(self):
        return self._value

    def set_value(self, value):
        self._value = value

    """ use property() instead of decorator to enable overriding """
    value = property(get_value, set_value)

    def get_unit(self):
        return self._unit

    def set_unit(self, unit):
        assert type(unit) is unicode
        self._unit = unit

    """ use property() instead of decorator to enable overriding """
    unit = property(get_unit, set_unit)

class Distance(Figure):

    def __init__(self, value, unit):
        assert type(value) is float
        super(Distance, self).__init__(value, unit)

    @property
    def metres(self):
        if self.unit == 'km':
            return self.value * 1000
        else:
            raise Exception()

class Sum(Figure):

    def __init__(self, value, currency):
        super(Sum, self).__init__(value, currency)

    def get_value(self):
        return super(Sum, self).get_value()

    def set_value(self, value):
        assert type(value) is float
        super(Sum, self).set_value(value)

    """ use property() instead of decorator to enable overriding """
    value = property(get_value, set_value)

    @property
    def currency(self):
        return self.unit

    def get_unit(self):
        return super(Sum, self).get_unit()

    def set_unit(self, currency):
        if currency == u'€':
            currency = u'EUR'
        assert type(currency) is unicode
        assert currency in [u'EUR']
        super(Sum, self).set_unit(currency)

    """ use property() instead of decorator to enable overriding """
    unit = property(get_unit, set_unit)