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

from yookassa.domain.common.payment_method_type import PaymentMethodType
from yookassa.domain.models.payment_data.payment_data import PaymentData


class PaymentDataCash(PaymentData):
    """
    Данные для оплаты наличными в терминалах России или СНГ.
    """  # noqa: E501

    __phone = None
    """Телефон пользователя, на который придет смс с кодом платежа (для внесения наличных). Указывается в формате [ITU-T E.164](https://ru.wikipedia.org/wiki/E.164), например ~`79000000000`. Поле можно оставить пустым: пользователь сможет заполнить его при оплате на стороне ЮKassa. """  # noqa: E501

    def __init__(self, *args, **kwargs):
        super(PaymentDataCash, self).__init__(*args, **kwargs)
        if self.type is None or self.type is not PaymentMethodType.CASH:
            self.type = PaymentMethodType.CASH

    @property
    def phone(self):
        """
        Возвращает phone модели PaymentDataCash.

        :return: phone модели PaymentDataCash.
        :rtype: str
        """
        return self.__phone

    @phone.setter
    def phone(self, value):
        """
        Устанавливает phone модели PaymentDataCash.

        :param value: phone модели PaymentDataCash.
        :type value: str
        """
        cast_value = str(value)
        if re.match('^[0-9]{4,15}$', cast_value):
            self.__phone = cast_value
        else:
            raise ValueError('Invalid phone value type')
