# coding: utf-8

"""
    Yahoo!広告 ディスプレイ広告 API リファレンス / Yahoo! JAPAN Ads Display Ads API Reference

    <div lang=\"ja\">Yahoo!広告 ディスプレイ広告 APIのWebサービスについて説明します。</div> <div lang=\"en\">Display Ads API Web Services supported in Yahoo! JAPAN Ads API.</div> <div><a target=\"_blank\" href=\"https://github.com/yahoojp-marketing/ads-display-api-documents/blob/master/design/v12/Route.yaml\">OpenAPI Specification</a></div> <div lang=\"ja\"><a target=\"_blank\" href=\"https://github.com/yahoojp-marketing/ads-display-api-documents/blob/master/bestpractice/ja\">Best Practice</a></div> <div lang=\"en\"><a target=\"_blank\" href=\"https://github.com/yahoojp-marketing/ads-display-api-documents/blob/master/bestpractice/en\">Best Practice</a></div>   # noqa: E501

    The version of the OpenAPI document: v12
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from yahoo_display_test.configuration import Configuration


class Account(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'account_id': 'int',
        'account_name': 'str',
        'account_status': 'AccountServiceStatus',
        'account_type': 'AccountServiceType',
        'auto_tagging_enabled': 'AccountServiceAutoTaggingEnabled',
        'delivery_status': 'AccountServiceDeliveryStatus',
        'is_test_account': 'AccountServiceIsTestAccount',
        'start_date': 'str',
        'end_date': 'str',
        'is_mcc_account': 'AccountServiceIsMccAccount',
        'contact_biz_id': 'str',
        'optimization_score': 'float'
    }

    attribute_map = {
        'account_id': 'accountId',
        'account_name': 'accountName',
        'account_status': 'accountStatus',
        'account_type': 'accountType',
        'auto_tagging_enabled': 'autoTaggingEnabled',
        'delivery_status': 'deliveryStatus',
        'is_test_account': 'isTestAccount',
        'start_date': 'startDate',
        'end_date': 'endDate',
        'is_mcc_account': 'isMccAccount',
        'contact_biz_id': 'contactBizId',
        'optimization_score': 'optimizationScore'
    }

    def __init__(self, account_id=None, account_name=None, account_status=None, account_type=None, auto_tagging_enabled=None, delivery_status=None, is_test_account=None, start_date=None, end_date=None, is_mcc_account=None, contact_biz_id=None, optimization_score=None, local_vars_configuration=None):  # noqa: E501
        """Account - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._account_id = None
        self._account_name = None
        self._account_status = None
        self._account_type = None
        self._auto_tagging_enabled = None
        self._delivery_status = None
        self._is_test_account = None
        self._start_date = None
        self._end_date = None
        self._is_mcc_account = None
        self._contact_biz_id = None
        self._optimization_score = None
        self.discriminator = None

        self.account_id = account_id
        self.account_name = account_name
        self.account_status = account_status
        self.account_type = account_type
        self.auto_tagging_enabled = auto_tagging_enabled
        self.delivery_status = delivery_status
        self.is_test_account = is_test_account
        self.start_date = start_date
        self.end_date = end_date
        self.is_mcc_account = is_mcc_account
        self.contact_biz_id = contact_biz_id
        self.optimization_score = optimization_score

    @property
    def account_id(self):
        """Gets the account_id of this Account.  # noqa: E501

        <div lang=\"ja\"> アカウントIDです。<br> SET時、このフィールドは必須となります。 </div> <div lang=\"en\"> Account ID.<br> This field is required in SET operation. </div>   # noqa: E501

        :return: The account_id of this Account.  # noqa: E501
        :rtype: int
        """
        return self._account_id

    @account_id.setter
    def account_id(self, account_id):
        """Sets the account_id of this Account.

        <div lang=\"ja\"> アカウントIDです。<br> SET時、このフィールドは必須となります。 </div> <div lang=\"en\"> Account ID.<br> This field is required in SET operation. </div>   # noqa: E501

        :param account_id: The account_id of this Account.  # noqa: E501
        :type: int
        """

        self._account_id = account_id

    @property
    def account_name(self):
        """Gets the account_name of this Account.  # noqa: E501

        <div lang=\"ja\"> アカウント名です。<br> SET時、このフィールドは省略可能となります。 </div> <div lang=\"en\"> Account name.<br> This field is optional in SET operation. </div>   # noqa: E501

        :return: The account_name of this Account.  # noqa: E501
        :rtype: str
        """
        return self._account_name

    @account_name.setter
    def account_name(self, account_name):
        """Sets the account_name of this Account.

        <div lang=\"ja\"> アカウント名です。<br> SET時、このフィールドは省略可能となります。 </div> <div lang=\"en\"> Account name.<br> This field is optional in SET operation. </div>   # noqa: E501

        :param account_name: The account_name of this Account.  # noqa: E501
        :type: str
        """

        self._account_name = account_name

    @property
    def account_status(self):
        """Gets the account_status of this Account.  # noqa: E501


        :return: The account_status of this Account.  # noqa: E501
        :rtype: AccountServiceStatus
        """
        return self._account_status

    @account_status.setter
    def account_status(self, account_status):
        """Sets the account_status of this Account.


        :param account_status: The account_status of this Account.  # noqa: E501
        :type: AccountServiceStatus
        """

        self._account_status = account_status

    @property
    def account_type(self):
        """Gets the account_type of this Account.  # noqa: E501


        :return: The account_type of this Account.  # noqa: E501
        :rtype: AccountServiceType
        """
        return self._account_type

    @account_type.setter
    def account_type(self, account_type):
        """Sets the account_type of this Account.


        :param account_type: The account_type of this Account.  # noqa: E501
        :type: AccountServiceType
        """

        self._account_type = account_type

    @property
    def auto_tagging_enabled(self):
        """Gets the auto_tagging_enabled of this Account.  # noqa: E501


        :return: The auto_tagging_enabled of this Account.  # noqa: E501
        :rtype: AccountServiceAutoTaggingEnabled
        """
        return self._auto_tagging_enabled

    @auto_tagging_enabled.setter
    def auto_tagging_enabled(self, auto_tagging_enabled):
        """Sets the auto_tagging_enabled of this Account.


        :param auto_tagging_enabled: The auto_tagging_enabled of this Account.  # noqa: E501
        :type: AccountServiceAutoTaggingEnabled
        """

        self._auto_tagging_enabled = auto_tagging_enabled

    @property
    def delivery_status(self):
        """Gets the delivery_status of this Account.  # noqa: E501


        :return: The delivery_status of this Account.  # noqa: E501
        :rtype: AccountServiceDeliveryStatus
        """
        return self._delivery_status

    @delivery_status.setter
    def delivery_status(self, delivery_status):
        """Sets the delivery_status of this Account.


        :param delivery_status: The delivery_status of this Account.  # noqa: E501
        :type: AccountServiceDeliveryStatus
        """

        self._delivery_status = delivery_status

    @property
    def is_test_account(self):
        """Gets the is_test_account of this Account.  # noqa: E501


        :return: The is_test_account of this Account.  # noqa: E501
        :rtype: AccountServiceIsTestAccount
        """
        return self._is_test_account

    @is_test_account.setter
    def is_test_account(self, is_test_account):
        """Sets the is_test_account of this Account.


        :param is_test_account: The is_test_account of this Account.  # noqa: E501
        :type: AccountServiceIsTestAccount
        """

        self._is_test_account = is_test_account

    @property
    def start_date(self):
        """Gets the start_date of this Account.  # noqa: E501

        <div lang=\"ja\"> 掲載開始日です。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。 </div> <div lang=\"en\"> Start date of ad serving.<br> Although this field will be returned in the response, it will be ignored on input. </div>   # noqa: E501

        :return: The start_date of this Account.  # noqa: E501
        :rtype: str
        """
        return self._start_date

    @start_date.setter
    def start_date(self, start_date):
        """Sets the start_date of this Account.

        <div lang=\"ja\"> 掲載開始日です。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。 </div> <div lang=\"en\"> Start date of ad serving.<br> Although this field will be returned in the response, it will be ignored on input. </div>   # noqa: E501

        :param start_date: The start_date of this Account.  # noqa: E501
        :type: str
        """

        self._start_date = start_date

    @property
    def end_date(self):
        """Gets the end_date of this Account.  # noqa: E501

        <div lang=\"ja\"> 掲載終了日です。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。 </div> <div lang=\"en\"> End date of ad serving.<br> Although this field will be returned in the response, it will be ignored on input. </div>   # noqa: E501

        :return: The end_date of this Account.  # noqa: E501
        :rtype: str
        """
        return self._end_date

    @end_date.setter
    def end_date(self, end_date):
        """Sets the end_date of this Account.

        <div lang=\"ja\"> 掲載終了日です。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。 </div> <div lang=\"en\"> End date of ad serving.<br> Although this field will be returned in the response, it will be ignored on input. </div>   # noqa: E501

        :param end_date: The end_date of this Account.  # noqa: E501
        :type: str
        """

        self._end_date = end_date

    @property
    def is_mcc_account(self):
        """Gets the is_mcc_account of this Account.  # noqa: E501


        :return: The is_mcc_account of this Account.  # noqa: E501
        :rtype: AccountServiceIsMccAccount
        """
        return self._is_mcc_account

    @is_mcc_account.setter
    def is_mcc_account(self, is_mcc_account):
        """Sets the is_mcc_account of this Account.


        :param is_mcc_account: The is_mcc_account of this Account.  # noqa: E501
        :type: AccountServiceIsMccAccount
        """

        self._is_mcc_account = is_mcc_account

    @property
    def contact_biz_id(self):
        """Gets the contact_biz_id of this Account.  # noqa: E501

        <div lang=\"ja\">アカウント管理者のYahoo! JAPANビジネスIDです。<br> MCCアカウントの場合、このフィールドは返却されず、リクエストの際も無視されます。<br> テストアカウントの場合、このフィールドは更新できません。</div> <div lang=\"en\">Contact business ID.<br> If isManagerAccount is \"TRUE\", this field will not be returned and will be ignored on request.<br> If isTestAccount is \"TRUE\", this field cannot be updated.</div>   # noqa: E501

        :return: The contact_biz_id of this Account.  # noqa: E501
        :rtype: str
        """
        return self._contact_biz_id

    @contact_biz_id.setter
    def contact_biz_id(self, contact_biz_id):
        """Sets the contact_biz_id of this Account.

        <div lang=\"ja\">アカウント管理者のYahoo! JAPANビジネスIDです。<br> MCCアカウントの場合、このフィールドは返却されず、リクエストの際も無視されます。<br> テストアカウントの場合、このフィールドは更新できません。</div> <div lang=\"en\">Contact business ID.<br> If isManagerAccount is \"TRUE\", this field will not be returned and will be ignored on request.<br> If isTestAccount is \"TRUE\", this field cannot be updated.</div>   # noqa: E501

        :param contact_biz_id: The contact_biz_id of this Account.  # noqa: E501
        :type: str
        """

        self._contact_biz_id = contact_biz_id

    @property
    def optimization_score(self):
        """Gets the optimization_score of this Account.  # noqa: E501

        <div lang=\"ja\">最適化スコアです。<br> 最適化スコアは、0.0から1.0の範囲の値を返却します。<br> アカウントの最適化スコアが計算不可の場合、最適化スコアは返却されません。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。</div> <div lang=\"en\">Optimization score.<br> Optimization score returns a value ranging from 0.0 to 1.0.<br> If the optimization score an account has is not computable, the optimization score will not be returned. Although this field will be returned in the response, it will be ignored on input.</div>   # noqa: E501

        :return: The optimization_score of this Account.  # noqa: E501
        :rtype: float
        """
        return self._optimization_score

    @optimization_score.setter
    def optimization_score(self, optimization_score):
        """Sets the optimization_score of this Account.

        <div lang=\"ja\">最適化スコアです。<br> 最適化スコアは、0.0から1.0の範囲の値を返却します。<br> アカウントの最適化スコアが計算不可の場合、最適化スコアは返却されません。<br> このフィールドは、レスポンスの際に返却されますが、リクエストの際には無視されます。</div> <div lang=\"en\">Optimization score.<br> Optimization score returns a value ranging from 0.0 to 1.0.<br> If the optimization score an account has is not computable, the optimization score will not be returned. Although this field will be returned in the response, it will be ignored on input.</div>   # noqa: E501

        :param optimization_score: The optimization_score of this Account.  # noqa: E501
        :type: float
        """

        self._optimization_score = optimization_score

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, Account):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, Account):
            return True

        return self.to_dict() != other.to_dict()
