# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from openapi_server.models.base_model_ import Model
from openapi_server.models.currency_stats import CurrencyStats
from openapi_server.models.stats_note import StatsNote
from openapi_server.models.stats_tags_source import StatsTagsSource
from openapi_server.models.stats_tool import StatsTool
from openapi_server.models.stats_version import StatsVersion
from openapi_server import util

from openapi_server.models.currency_stats import CurrencyStats  # noqa: E501
from openapi_server.models.stats_note import StatsNote  # noqa: E501
from openapi_server.models.stats_tags_source import StatsTagsSource  # noqa: E501
from openapi_server.models.stats_tool import StatsTool  # noqa: E501
from openapi_server.models.stats_version import StatsVersion  # noqa: E501

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

    Do not edit the class manually.
    """

    def __init__(self, currencies=None, version=None, tools=None, tags_source=None, notes=None):  # noqa: E501
        """Stats - a model defined in OpenAPI

        :param currencies: The currencies of this Stats.  # noqa: E501
        :type currencies: List[CurrencyStats]
        :param version: The version of this Stats.  # noqa: E501
        :type version: StatsVersion
        :param tools: The tools of this Stats.  # noqa: E501
        :type tools: List[StatsTool]
        :param tags_source: The tags_source of this Stats.  # noqa: E501
        :type tags_source: StatsTagsSource
        :param notes: The notes of this Stats.  # noqa: E501
        :type notes: List[StatsNote]
        """
        self.openapi_types = {
            'currencies': List[CurrencyStats],
            'version': StatsVersion,
            'tools': List[StatsTool],
            'tags_source': StatsTagsSource,
            'notes': List[StatsNote]
        }

        self.attribute_map = {
            'currencies': 'currencies',
            'version': 'version',
            'tools': 'tools',
            'tags_source': 'tags_source',
            'notes': 'notes'
        }

        self._currencies = currencies
        self._version = version
        self._tools = tools
        self._tags_source = tags_source
        self._notes = notes

    @classmethod
    def from_dict(cls, dikt) -> 'Stats':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The stats of this Stats.  # noqa: E501
        :rtype: Stats
        """
        return util.deserialize_model(dikt, cls)

    def to_dict(self, prefix=""):
        """Returns the model as a dict:

        :return: The Stats as a dict
        :rtype: dict
        """
        return { 'currencies': self._currencies,
            'version': self._version,
            'tools': self._tools,
            'tags_source': self._tags_source,
            'notes': self._notes }


    @property
    def currencies(self):
        """Gets the currencies of this Stats.


        :return: The currencies of this Stats.
        :rtype: List[CurrencyStats]
        """
        return self._currencies

    @currencies.setter
    def currencies(self, currencies):
        """Sets the currencies of this Stats.


        :param currencies: The currencies of this Stats.
        :type currencies: List[CurrencyStats]
        """

        self._currencies = currencies

    @property
    def version(self):
        """Gets the version of this Stats.


        :return: The version of this Stats.
        :rtype: StatsVersion
        """
        return self._version

    @version.setter
    def version(self, version):
        """Sets the version of this Stats.


        :param version: The version of this Stats.
        :type version: StatsVersion
        """

        self._version = version

    @property
    def tools(self):
        """Gets the tools of this Stats.


        :return: The tools of this Stats.
        :rtype: List[StatsTool]
        """
        return self._tools

    @tools.setter
    def tools(self, tools):
        """Sets the tools of this Stats.


        :param tools: The tools of this Stats.
        :type tools: List[StatsTool]
        """

        self._tools = tools

    @property
    def tags_source(self):
        """Gets the tags_source of this Stats.


        :return: The tags_source of this Stats.
        :rtype: StatsTagsSource
        """
        return self._tags_source

    @tags_source.setter
    def tags_source(self, tags_source):
        """Sets the tags_source of this Stats.


        :param tags_source: The tags_source of this Stats.
        :type tags_source: StatsTagsSource
        """

        self._tags_source = tags_source

    @property
    def notes(self):
        """Gets the notes of this Stats.


        :return: The notes of this Stats.
        :rtype: List[StatsNote]
        """
        return self._notes

    @notes.setter
    def notes(self, notes):
        """Sets the notes of this Stats.


        :param notes: The notes of this Stats.
        :type notes: List[StatsNote]
        """

        self._notes = notes
