# coding: utf-8

"""
    Paragon Insights APIs

    API interface for PI application  # noqa: E501

    OpenAPI spec version: 4.0.0
    Contact: healthbot-feedback@juniper.net
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six


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

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'description': 'str',
        'ingest_frequency': 'list[str]',
        'network_group_name': 'str',
        'publish': 'NetworkgroupSchemaPublish',
        'logging': 'NetworkgroupSchemaLogging',
        'reports': 'list[str]',
        'root_cause_analysis': 'DevicegroupSchemaRootcauseanalysis',
        'notification': 'NetworkgroupSchemaNotification',
        'playbooks': 'list[str]',
        'tagging_profile': 'list[str]',
        'scheduler': 'list[DevicegroupSchemaScheduler]',
        'variable': 'list[DevicegroupSchemaVariable]',
        'action_scheduler': 'DevicegroupSchemaActionscheduler'
    }

    attribute_map = {
        'description': 'description',
        'ingest_frequency': 'ingest-frequency',
        'network_group_name': 'network-group-name',
        'publish': 'publish',
        'logging': 'logging',
        'reports': 'reports',
        'root_cause_analysis': 'root-cause-analysis',
        'notification': 'notification',
        'playbooks': 'playbooks',
        'tagging_profile': 'tagging-profile',
        'scheduler': 'scheduler',
        'variable': 'variable',
        'action_scheduler': 'action-scheduler'
    }

    def __init__(self, description=None, ingest_frequency=None, network_group_name=None, publish=None, logging=None, reports=None, root_cause_analysis=None, notification=None, playbooks=None, tagging_profile=None, scheduler=None, variable=None, action_scheduler=None):  # noqa: E501
        """NetworkGroupSchema - a model defined in Swagger"""  # noqa: E501

        self._description = None
        self._ingest_frequency = None
        self._network_group_name = None
        self._publish = None
        self._logging = None
        self._reports = None
        self._root_cause_analysis = None
        self._notification = None
        self._playbooks = None
        self._tagging_profile = None
        self._scheduler = None
        self._variable = None
        self._action_scheduler = None
        self.discriminator = None

        if description is not None:
            self.description = description
        if ingest_frequency is not None:
            self.ingest_frequency = ingest_frequency
        self.network_group_name = network_group_name
        if publish is not None:
            self.publish = publish
        if logging is not None:
            self.logging = logging
        if reports is not None:
            self.reports = reports
        if root_cause_analysis is not None:
            self.root_cause_analysis = root_cause_analysis
        if notification is not None:
            self.notification = notification
        if playbooks is not None:
            self.playbooks = playbooks
        if tagging_profile is not None:
            self.tagging_profile = tagging_profile
        if scheduler is not None:
            self.scheduler = scheduler
        if variable is not None:
            self.variable = variable
        if action_scheduler is not None:
            self.action_scheduler = action_scheduler

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

        Description about the network group  # noqa: E501

        :return: The description of this NetworkGroupSchema.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this NetworkGroupSchema.

        Description about the network group  # noqa: E501

        :param description: The description of this NetworkGroupSchema.  # noqa: E501
        :type: str
        """

        self._description = description

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


        :return: The ingest_frequency of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[str]
        """
        return self._ingest_frequency

    @ingest_frequency.setter
    def ingest_frequency(self, ingest_frequency):
        """Sets the ingest_frequency of this NetworkGroupSchema.


        :param ingest_frequency: The ingest_frequency of this NetworkGroupSchema.  # noqa: E501
        :type: list[str]
        """

        self._ingest_frequency = ingest_frequency

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

        Name of the network group. Should be of pattern [a-zA-Z][a-zA-Z0-9-]*  # noqa: E501

        :return: The network_group_name of this NetworkGroupSchema.  # noqa: E501
        :rtype: str
        """
        return self._network_group_name

    @network_group_name.setter
    def network_group_name(self, network_group_name):
        """Sets the network_group_name of this NetworkGroupSchema.

        Name of the network group. Should be of pattern [a-zA-Z][a-zA-Z0-9-]*  # noqa: E501

        :param network_group_name: The network_group_name of this NetworkGroupSchema.  # noqa: E501
        :type: str
        """
        if network_group_name is None:
            raise ValueError("Invalid value for `network_group_name`, must not be `None`")  # noqa: E501
        if network_group_name is not None and len(network_group_name) > 40:
            raise ValueError("Invalid value for `network_group_name`, length must be less than or equal to `40`")  # noqa: E501
        if network_group_name is not None and not re.search(r'^[a-zA-Z][a-zA-Z0-9-]*$', network_group_name):  # noqa: E501
            raise ValueError(r"Invalid value for `network_group_name`, must be a follow pattern or equal to `/^[a-zA-Z][a-zA-Z0-9-]*$/`")  # noqa: E501

        self._network_group_name = network_group_name

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


        :return: The publish of this NetworkGroupSchema.  # noqa: E501
        :rtype: NetworkgroupSchemaPublish
        """
        return self._publish

    @publish.setter
    def publish(self, publish):
        """Sets the publish of this NetworkGroupSchema.


        :param publish: The publish of this NetworkGroupSchema.  # noqa: E501
        :type: NetworkgroupSchemaPublish
        """

        self._publish = publish

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


        :return: The logging of this NetworkGroupSchema.  # noqa: E501
        :rtype: NetworkgroupSchemaLogging
        """
        return self._logging

    @logging.setter
    def logging(self, logging):
        """Sets the logging of this NetworkGroupSchema.


        :param logging: The logging of this NetworkGroupSchema.  # noqa: E501
        :type: NetworkgroupSchemaLogging
        """

        self._logging = logging

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


        :return: The reports of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[str]
        """
        return self._reports

    @reports.setter
    def reports(self, reports):
        """Sets the reports of this NetworkGroupSchema.


        :param reports: The reports of this NetworkGroupSchema.  # noqa: E501
        :type: list[str]
        """

        self._reports = reports

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


        :return: The root_cause_analysis of this NetworkGroupSchema.  # noqa: E501
        :rtype: DevicegroupSchemaRootcauseanalysis
        """
        return self._root_cause_analysis

    @root_cause_analysis.setter
    def root_cause_analysis(self, root_cause_analysis):
        """Sets the root_cause_analysis of this NetworkGroupSchema.


        :param root_cause_analysis: The root_cause_analysis of this NetworkGroupSchema.  # noqa: E501
        :type: DevicegroupSchemaRootcauseanalysis
        """

        self._root_cause_analysis = root_cause_analysis

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


        :return: The notification of this NetworkGroupSchema.  # noqa: E501
        :rtype: NetworkgroupSchemaNotification
        """
        return self._notification

    @notification.setter
    def notification(self, notification):
        """Sets the notification of this NetworkGroupSchema.


        :param notification: The notification of this NetworkGroupSchema.  # noqa: E501
        :type: NetworkgroupSchemaNotification
        """

        self._notification = notification

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


        :return: The playbooks of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[str]
        """
        return self._playbooks

    @playbooks.setter
    def playbooks(self, playbooks):
        """Sets the playbooks of this NetworkGroupSchema.


        :param playbooks: The playbooks of this NetworkGroupSchema.  # noqa: E501
        :type: list[str]
        """

        self._playbooks = playbooks

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


        :return: The tagging_profile of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[str]
        """
        return self._tagging_profile

    @tagging_profile.setter
    def tagging_profile(self, tagging_profile):
        """Sets the tagging_profile of this NetworkGroupSchema.


        :param tagging_profile: The tagging_profile of this NetworkGroupSchema.  # noqa: E501
        :type: list[str]
        """

        self._tagging_profile = tagging_profile

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

        List of schedulers associated with the playbook instances  # noqa: E501

        :return: The scheduler of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[DevicegroupSchemaScheduler]
        """
        return self._scheduler

    @scheduler.setter
    def scheduler(self, scheduler):
        """Sets the scheduler of this NetworkGroupSchema.

        List of schedulers associated with the playbook instances  # noqa: E501

        :param scheduler: The scheduler of this NetworkGroupSchema.  # noqa: E501
        :type: list[DevicegroupSchemaScheduler]
        """

        self._scheduler = scheduler

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

        Playbook variable configuration  # noqa: E501

        :return: The variable of this NetworkGroupSchema.  # noqa: E501
        :rtype: list[DevicegroupSchemaVariable]
        """
        return self._variable

    @variable.setter
    def variable(self, variable):
        """Sets the variable of this NetworkGroupSchema.

        Playbook variable configuration  # noqa: E501

        :param variable: The variable of this NetworkGroupSchema.  # noqa: E501
        :type: list[DevicegroupSchemaVariable]
        """

        self._variable = variable

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


        :return: The action_scheduler of this NetworkGroupSchema.  # noqa: E501
        :rtype: DevicegroupSchemaActionscheduler
        """
        return self._action_scheduler

    @action_scheduler.setter
    def action_scheduler(self, action_scheduler):
        """Sets the action_scheduler of this NetworkGroupSchema.


        :param action_scheduler: The action_scheduler of this NetworkGroupSchema.  # noqa: E501
        :type: DevicegroupSchemaActionscheduler
        """

        self._action_scheduler = action_scheduler

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

        for attr, _ in six.iteritems(self.swagger_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
        if issubclass(NetworkGroupSchema, dict):
            for key, value in self.items():
                result[key] = 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, NetworkGroupSchema):
            return False

        return self.__dict__ == other.__dict__

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