# coding: utf-8

from __future__ import absolute_import
from swagger_server.models.framework_search_aggregation_interface import FrameworkSearchAggregationInterface
from swagger_server.models.framework_search_document_interface import FrameworkSearchDocumentInterface
from swagger_server.models.framework_search_search_criteria_interface import FrameworkSearchSearchCriteriaInterface
from .base_model_ import Model
from datetime import date, datetime
from typing import List, Dict
from ..util import deserialize_model


class FrameworkSearchSearchResultInterface(Model):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, items: List[FrameworkSearchDocumentInterface]=None, aggregations: FrameworkSearchAggregationInterface=None, search_criteria: FrameworkSearchSearchCriteriaInterface=None, total_count: int=None):
        """
        FrameworkSearchSearchResultInterface - a model defined in Swagger

        :param items: The items of this FrameworkSearchSearchResultInterface.
        :type items: List[FrameworkSearchDocumentInterface]
        :param aggregations: The aggregations of this FrameworkSearchSearchResultInterface.
        :type aggregations: FrameworkSearchAggregationInterface
        :param search_criteria: The search_criteria of this FrameworkSearchSearchResultInterface.
        :type search_criteria: FrameworkSearchSearchCriteriaInterface
        :param total_count: The total_count of this FrameworkSearchSearchResultInterface.
        :type total_count: int
        """
        self.swagger_types = {
            'items': List[FrameworkSearchDocumentInterface],
            'aggregations': FrameworkSearchAggregationInterface,
            'search_criteria': FrameworkSearchSearchCriteriaInterface,
            'total_count': int
        }

        self.attribute_map = {
            'items': 'items',
            'aggregations': 'aggregations',
            'search_criteria': 'search_criteria',
            'total_count': 'total_count'
        }

        self._items = items
        self._aggregations = aggregations
        self._search_criteria = search_criteria
        self._total_count = total_count

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

        :param dikt: A dict.
        :type: dict
        :return: The framework-search-search-result-interface of this FrameworkSearchSearchResultInterface.
        :rtype: FrameworkSearchSearchResultInterface
        """
        return deserialize_model(dikt, cls)

    @property
    def items(self) -> List[FrameworkSearchDocumentInterface]:
        """
        Gets the items of this FrameworkSearchSearchResultInterface.

        :return: The items of this FrameworkSearchSearchResultInterface.
        :rtype: List[FrameworkSearchDocumentInterface]
        """
        return self._items

    @items.setter
    def items(self, items: List[FrameworkSearchDocumentInterface]):
        """
        Sets the items of this FrameworkSearchSearchResultInterface.

        :param items: The items of this FrameworkSearchSearchResultInterface.
        :type items: List[FrameworkSearchDocumentInterface]
        """
        if items is None:
            raise ValueError("Invalid value for `items`, must not be `None`")

        self._items = items

    @property
    def aggregations(self) -> FrameworkSearchAggregationInterface:
        """
        Gets the aggregations of this FrameworkSearchSearchResultInterface.

        :return: The aggregations of this FrameworkSearchSearchResultInterface.
        :rtype: FrameworkSearchAggregationInterface
        """
        return self._aggregations

    @aggregations.setter
    def aggregations(self, aggregations: FrameworkSearchAggregationInterface):
        """
        Sets the aggregations of this FrameworkSearchSearchResultInterface.

        :param aggregations: The aggregations of this FrameworkSearchSearchResultInterface.
        :type aggregations: FrameworkSearchAggregationInterface
        """
        if aggregations is None:
            raise ValueError("Invalid value for `aggregations`, must not be `None`")

        self._aggregations = aggregations

    @property
    def search_criteria(self) -> FrameworkSearchSearchCriteriaInterface:
        """
        Gets the search_criteria of this FrameworkSearchSearchResultInterface.

        :return: The search_criteria of this FrameworkSearchSearchResultInterface.
        :rtype: FrameworkSearchSearchCriteriaInterface
        """
        return self._search_criteria

    @search_criteria.setter
    def search_criteria(self, search_criteria: FrameworkSearchSearchCriteriaInterface):
        """
        Sets the search_criteria of this FrameworkSearchSearchResultInterface.

        :param search_criteria: The search_criteria of this FrameworkSearchSearchResultInterface.
        :type search_criteria: FrameworkSearchSearchCriteriaInterface
        """
        if search_criteria is None:
            raise ValueError("Invalid value for `search_criteria`, must not be `None`")

        self._search_criteria = search_criteria

    @property
    def total_count(self) -> int:
        """
        Gets the total_count of this FrameworkSearchSearchResultInterface.
        Total count.

        :return: The total_count of this FrameworkSearchSearchResultInterface.
        :rtype: int
        """
        return self._total_count

    @total_count.setter
    def total_count(self, total_count: int):
        """
        Sets the total_count of this FrameworkSearchSearchResultInterface.
        Total count.

        :param total_count: The total_count of this FrameworkSearchSearchResultInterface.
        :type total_count: int
        """
        if total_count is None:
            raise ValueError("Invalid value for `total_count`, must not be `None`")

        self._total_count = total_count

