from parallels.core.utils.entity import Entity


class User(Entity):
    external_email = ''

    def __init__(
        self, user_id, owner_id, subscription_domain_id, role_id, login, password, password_type, guid, locale,
        creation_date, is_locked, is_built_in, contact_name, email, company_name, country, postal_code, state, city,
        address, phone, fax, im_type, im_number, additional_info, external_email
    ):
        self._user_id = user_id
        self._owner_id = owner_id
        self._subscription_domain_id = subscription_domain_id
        self._role_id = role_id
        self._login = login
        self._password = password
        self._password_type = password_type
        self._guid = guid
        self._locale = locale
        self._creation_date = creation_date
        self._is_locked = is_locked
        self._is_built_in = is_built_in
        self._contact_name = contact_name
        self._email = email
        self._company_name = company_name
        self._country = country
        self._postal_code = postal_code
        self._state = state
        self._city = city
        self._address = address
        self._phone = phone
        self._fax = fax
        self._im_type = im_type
        self._im_number = im_number
        self._additional_info = additional_info
        self._external_email = external_email

    @property
    def user_id(self):
        """
        :rtype: str | unicode
        """
        return self._user_id

    @property
    def owner_id(self):
        """
        :rtype: str | unicode
        """
        return self._owner_id

    @property
    def subscription_domain_id(self):
        """
        :rtype: str | unicode
        """
        return self._subscription_domain_id

    @property
    def role_id(self):
        """
        :rtype: str | unicode
        """
        return self._role_id

    @property
    def login(self):
        """
        :rtype: str | unicode
        """
        return self._login

    @property
    def password(self):
        """
        :rtype: str | unicode | None
        """
        return self._password

    @property
    def password_type(self):
        """
        :rtype: str | unicode | None
        """
        return self._password_type

    @property
    def guid(self):
        """
        :rtype: str | unicode
        """
        return self._guid

    @property
    def locale(self):
        """
        :rtype: str | unicode
        """
        return self._locale

    @property
    def creation_date(self):
        """
        :rtype: str | unicode
        """
        return self._creation_date

    @property
    def is_locked(self):
        """
        :rtype: str | unicode
        """
        return self._is_locked

    @property
    def is_built_in(self):
        """
        :rtype: str | unicode
        """
        return self._is_built_in

    @property
    def contact_name(self):
        """
        :rtype: str | unicode
        """
        return self._contact_name

    @property
    def email(self):
        """
        :rtype: str | unicode
        """
        return self._email

    @property
    def company_name(self):
        """
        :rtype: str | unicode
        """
        return self._company_name

    @property
    def country(self):
        """
        :rtype: str | unicode
        """
        return self._country

    @property
    def postal_code(self):
        """
        :rtype: str | unicode
        """
        return self._postal_code

    @property
    def state(self):
        """
        :rtype: str | unicode
        """
        return self._state

    @property
    def city(self):
        """
        :rtype: str | unicode
        """
        return self._city

    @property
    def address(self):
        """
        :rtype: str | unicode
        """
        return self._address

    @property
    def phone(self):
        """
        :rtype: str | unicode
        """
        return self._phone

    @property
    def fax(self):
        """
        :rtype: str | unicode
        """
        return self._fax

    @property
    def im_type(self):
        """
        :rtype: str | unicode
        """
        return self._im_type

    @property
    def im_number(self):
        """
        :rtype: str | unicode
        """
        return self._im_number

    @property
    def additional_info(self):
        """
        :rtype: str | unicode
        """
        return self._additional_info

    @property
    def external_email(self):
        """
        :rtype: str | unicode
        """
        return self._external_email
