# coding: utf-8

"""
    Zadara VPSA Storage Array REST API

     # Overview  This document outlines the methods available for administrating your Zadara Storage VPSA&#8482;. The Zadara Storage Array REST API   supports form-encoded, JSON, and XML requests, and can return either JSON or XML responses.  ## Usage  The majority of the APIs available require authentication which requires an API token to use. You can retrieve this token through the   Users section of your VPSA, or through the API using the \"Return a user's access key\" API in the Users Section below.  ## Authentication Methods  The authentication token can be passed either through the access_key parameter inside of the body of the REST API request, or   through the X-Access-Key header.  ## Timeouts  By default, all operations that don't complete within five seconds will return a message informing you that the action may take some  time to complete. When using the API, this can cause some actions, such as large volume creation, to be undesirably asynchronous.  You can specify your own timeout with the timeout parameter, in seconds, and a timeout value of -1 specifies an infinite timeout.  ## Specific Fields For Product  Some of the fields/actions used in the API should be used only for a specific product. The following tags are used to mark which   product responds to the fields/actions  VPSA Flash Array  VPSA Storage Array - Hybrid VPSA  ## Questions  If you have any questions or need support involving the REST API, please contact for assistance.   # noqa: E501

    OpenAPI spec version: 23.03-sp1
    Contact: support@zadarastorage.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from Vpsa.configuration import Configuration


class UpdateFlcPolicy(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 = {
        'display_name': 'str',
        'file_selection_criteria': 'str',
        'lc_action': 'str',
        'enabled': 'str',
        'dry_run': 'str',
        'use_recycle_bin': 'str',
        'whitelist_paths': 'str',
        'blacklist_paths': 'str',
        'dest_obs_name': 'str'
    }

    attribute_map = {
        'display_name': 'display_name',
        'file_selection_criteria': 'file_selection_criteria',
        'lc_action': 'lc_action',
        'enabled': 'enabled',
        'dry_run': 'dry_run',
        'use_recycle_bin': 'use_recycle_bin',
        'whitelist_paths': 'whitelist_paths',
        'blacklist_paths': 'blacklist_paths',
        'dest_obs_name': 'dest_obs_name'
    }

    def __init__(self, display_name=None, file_selection_criteria=None, lc_action=None, enabled=None, dry_run=None, use_recycle_bin=None, whitelist_paths=None, blacklist_paths=None, dest_obs_name=None, _configuration=None):  # noqa: E501
        """UpdateFlcPolicy - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._display_name = None
        self._file_selection_criteria = None
        self._lc_action = None
        self._enabled = None
        self._dry_run = None
        self._use_recycle_bin = None
        self._whitelist_paths = None
        self._blacklist_paths = None
        self._dest_obs_name = None
        self.discriminator = None

        if display_name is not None:
            self.display_name = display_name
        if file_selection_criteria is not None:
            self.file_selection_criteria = file_selection_criteria
        if lc_action is not None:
            self.lc_action = lc_action
        if enabled is not None:
            self.enabled = enabled
        if dry_run is not None:
            self.dry_run = dry_run
        if use_recycle_bin is not None:
            self.use_recycle_bin = use_recycle_bin
        if whitelist_paths is not None:
            self.whitelist_paths = whitelist_paths
        if blacklist_paths is not None:
            self.blacklist_paths = blacklist_paths
        if dest_obs_name is not None:
            self.dest_obs_name = dest_obs_name

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

        Policy name.  # noqa: E501

        :return: The display_name of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._display_name

    @display_name.setter
    def display_name(self, display_name):
        """Sets the display_name of this UpdateFlcPolicy.

        Policy name.  # noqa: E501

        :param display_name: The display_name of this UpdateFlcPolicy.  # noqa: E501
        :type: str
        """

        self._display_name = display_name

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

        The criteria by which the policy files will be selected. Should be in a MongoDB $match aggregation format.  # noqa: E501

        :return: The file_selection_criteria of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._file_selection_criteria

    @file_selection_criteria.setter
    def file_selection_criteria(self, file_selection_criteria):
        """Sets the file_selection_criteria of this UpdateFlcPolicy.

        The criteria by which the policy files will be selected. Should be in a MongoDB $match aggregation format.  # noqa: E501

        :param file_selection_criteria: The file_selection_criteria of this UpdateFlcPolicy.  # noqa: E501
        :type: str
        """

        self._file_selection_criteria = file_selection_criteria

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

        The action that the policy performs on the selected files.  # noqa: E501

        :return: The lc_action of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._lc_action

    @lc_action.setter
    def lc_action(self, lc_action):
        """Sets the lc_action of this UpdateFlcPolicy.

        The action that the policy performs on the selected files.  # noqa: E501

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

        self._lc_action = lc_action

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

        Controls enablement of the policy after it is created.  # noqa: E501

        :return: The enabled of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._enabled

    @enabled.setter
    def enabled(self, enabled):
        """Sets the enabled of this UpdateFlcPolicy.

        Controls enablement of the policy after it is created.  # noqa: E501

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

        self._enabled = enabled

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

        When the policy is in dry run mode, it'll only print its actions to the log instead of actually performing them.  # noqa: E501

        :return: The dry_run of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._dry_run

    @dry_run.setter
    def dry_run(self, dry_run):
        """Sets the dry_run of this UpdateFlcPolicy.

        When the policy is in dry run mode, it'll only print its actions to the log instead of actually performing them.  # noqa: E501

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

        self._dry_run = dry_run

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

        When using recycle bin, files that are handled by the policy are also copied to the recycle bin.  # noqa: E501

        :return: The use_recycle_bin of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._use_recycle_bin

    @use_recycle_bin.setter
    def use_recycle_bin(self, use_recycle_bin):
        """Sets the use_recycle_bin of this UpdateFlcPolicy.

        When using recycle bin, files that are handled by the policy are also copied to the recycle bin.  # noqa: E501

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

        self._use_recycle_bin = use_recycle_bin

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

        Comma delimited list of paths that the policy should only run on them.  # noqa: E501

        :return: The whitelist_paths of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._whitelist_paths

    @whitelist_paths.setter
    def whitelist_paths(self, whitelist_paths):
        """Sets the whitelist_paths of this UpdateFlcPolicy.

        Comma delimited list of paths that the policy should only run on them.  # noqa: E501

        :param whitelist_paths: The whitelist_paths of this UpdateFlcPolicy.  # noqa: E501
        :type: str
        """

        self._whitelist_paths = whitelist_paths

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

        Comma delimited list of paths that the policy should not run on.  # noqa: E501

        :return: The blacklist_paths of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._blacklist_paths

    @blacklist_paths.setter
    def blacklist_paths(self, blacklist_paths):
        """Sets the blacklist_paths of this UpdateFlcPolicy.

        Comma delimited list of paths that the policy should not run on.  # noqa: E501

        :param blacklist_paths: The blacklist_paths of this UpdateFlcPolicy.  # noqa: E501
        :type: str
        """

        self._blacklist_paths = blacklist_paths

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

        Destination object storage to archive files to.  # noqa: E501

        :return: The dest_obs_name of this UpdateFlcPolicy.  # noqa: E501
        :rtype: str
        """
        return self._dest_obs_name

    @dest_obs_name.setter
    def dest_obs_name(self, dest_obs_name):
        """Sets the dest_obs_name of this UpdateFlcPolicy.

        Destination object storage to archive files to.  # noqa: E501

        :param dest_obs_name: The dest_obs_name of this UpdateFlcPolicy.  # noqa: E501
        :type: str
        """

        self._dest_obs_name = dest_obs_name

    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(UpdateFlcPolicy, 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, UpdateFlcPolicy):
            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, UpdateFlcPolicy):
            return True

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