# coding: utf-8

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

from typing import List, Dict  # noqa: F401

from recommenderserver.models.base_model_ import Model
from recommenderserver.models.recommended_activity import RecommendedActivity  # noqa: F401,E501
from recommenderserver import util


class RecommendationRow(Model):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    def __init__(self, type: str=None, name: str=None, strategy: str=None, params: Dict[str, str]=None, activities: List[RecommendedActivity]=None):  # noqa: E501
        """RecommendationRow - a model defined in Swagger

        :param type: The type of this RecommendationRow.  # noqa: E501
        :type type: str
        :param name: The name of this RecommendationRow.  # noqa: E501
        :type name: str
        :param strategy: The strategy of this RecommendationRow.  # noqa: E501
        :type strategy: str
        :param params: The params of this RecommendationRow.  # noqa: E501
        :type params: Dict[str, str]
        :param activities: The activities of this RecommendationRow.  # noqa: E501
        :type activities: List[RecommendedActivity]
        """
        self.swagger_types = {
            'type': str,
            'name': str,
            'strategy': str,
            'params': Dict[str, str],
            'activities': List[RecommendedActivity]
        }

        self.attribute_map = {
            'type': '_type',
            'name': 'name',
            'strategy': 'strategy',
            'params': 'params',
            'activities': 'activities'
        }

        self._type = type
        self._name = name
        self._strategy = strategy
        self._params = params
        self._activities = activities

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

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

    @property
    def type(self) -> str:
        """Gets the type of this RecommendationRow.


        :return: The type of this RecommendationRow.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type: str):
        """Sets the type of this RecommendationRow.


        :param type: The type of this RecommendationRow.
        :type type: str
        """
        allowed_values = ["RecommendationRow"]  # noqa: E501
        if type not in allowed_values:
            raise ValueError(
                "Invalid value for `type` ({0}), must be one of {1}"
                .format(type, allowed_values)
            )

        self._type = type

    @property
    def name(self) -> str:
        """Gets the name of this RecommendationRow.

        Display name of the recommendation row.  # noqa: E501

        :return: The name of this RecommendationRow.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this RecommendationRow.

        Display name of the recommendation row.  # noqa: E501

        :param name: The name of this RecommendationRow.
        :type name: str
        """

        self._name = name

    @property
    def strategy(self) -> str:
        """Gets the strategy of this RecommendationRow.

        Strategy class used to make the recommendations in this row.  # noqa: E501

        :return: The strategy of this RecommendationRow.
        :rtype: str
        """
        return self._strategy

    @strategy.setter
    def strategy(self, strategy: str):
        """Sets the strategy of this RecommendationRow.

        Strategy class used to make the recommendations in this row.  # noqa: E501

        :param strategy: The strategy of this RecommendationRow.
        :type strategy: str
        """

        self._strategy = strategy

    @property
    def params(self) -> Dict[str, str]:
        """Gets the params of this RecommendationRow.

        Keys with string values, representing the parameters used to instantiate this strategy.  # noqa: E501

        :return: The params of this RecommendationRow.
        :rtype: Dict[str, str]
        """
        return self._params

    @params.setter
    def params(self, params: Dict[str, str]):
        """Sets the params of this RecommendationRow.

        Keys with string values, representing the parameters used to instantiate this strategy.  # noqa: E501

        :param params: The params of this RecommendationRow.
        :type params: Dict[str, str]
        """

        self._params = params

    @property
    def activities(self) -> List[RecommendedActivity]:
        """Gets the activities of this RecommendationRow.

        an array of recommendations in the form of activity ids  # noqa: E501

        :return: The activities of this RecommendationRow.
        :rtype: List[RecommendedActivity]
        """
        return self._activities

    @activities.setter
    def activities(self, activities: List[RecommendedActivity]):
        """Sets the activities of this RecommendationRow.

        an array of recommendations in the form of activity ids  # noqa: E501

        :param activities: The activities of this RecommendationRow.
        :type activities: List[RecommendedActivity]
        """

        self._activities = activities
