from django.contrib.auth.models import AbstractUser
from django.db import models
from django.core.validators import MinValueValidator

from uncloud_pay import AMOUNT_DECIMALS, AMOUNT_MAX_DIGITS
from uncloud_pay.models import get_balance_for_user

class User(AbstractUser):
    """
    We use the standard user and add a maximum credit that is allowed
    to be accumulated. After that we need to have warnings, cancellation, etc.
    """

    maximum_credit = models.DecimalField(
            default=0.0,
            max_digits=AMOUNT_MAX_DIGITS,
            decimal_places=AMOUNT_DECIMALS,
            validators=[MinValueValidator(0)])

    # @property
    # def primary_billing_address(self):

    @property
    def balance(self):
        return get_balance_for_user(self)