# coding=utf-8
# --------------------------------------------------------------------------
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model


class BulkMeterCostAvoidanceSettings(Model):
    """BulkMeterCostAvoidanceSettings.

    :param attempt_cooling_adjustment: Indicates whether or not the cost
     avoidance processor will attempt cooling adjustments <span
     class='property-internal'>Required (defined)</span>
    :type attempt_cooling_adjustment: bool
    :param attempt_heating_adjustment: Indicates whether or not the cost
     avoidance processor will attempt heating adjustments <span
     class='property-internal'>Required (defined)</span>
    :type attempt_heating_adjustment: bool
    :param num_baseline_months: Determines number of months of data included
     in the meter's cost avoidance baseline <span
     class='property-internal'>Must be between 12 and 36</span> <span
     class='property-internal'>Required (defined)</span>
    :type num_baseline_months: int
    :param baseline_start_date: Determines the start date of the meter's cost
     avoidance baseline <span class='property-internal'>Must be between
     12/31/1899 and 1/1/3000</span> <span class='property-internal'>Required
     (defined)</span>
    :type baseline_start_date: datetime
    :param cooling_needed_above: Determines the external temperature above
     which cooling is expected to take place <span
     class='property-internal'>Required (defined)</span>
    :type cooling_needed_above: int
    :param heating_needed_below: Determines the external temperature below
     which heating is expected to take place <span
     class='property-internal'>Required (defined)</span>
    :type heating_needed_below: int
    :param include_meter_in_cost_avoidance: Determines whether or not to
     include the meter in cost avoidance processing <span
     class='property-internal'>Required (defined)</span>
    :type include_meter_in_cost_avoidance: bool
    :param savings_start_date: Determines the start date after which energy
     and cost savings are expected to accrue <span
     class='property-internal'>Must be between 12/31/1899 and 1/1/3000</span>
     <span class='property-internal'>Required (defined)</span>
    :type savings_start_date: datetime
    :param filters: Filter criteria which determine the meters whose cost
     avoidance settings will be updated <span
     class='property-internal'>Required (defined)</span>
    :type filters: list[~energycap.sdk.models.FilterEdit]
    """

    _validation = {
        'num_baseline_months': {'maximum': 36, 'minimum': 12},
    }

    _attribute_map = {
        'attempt_cooling_adjustment': {'key': 'attemptCoolingAdjustment', 'type': 'bool'},
        'attempt_heating_adjustment': {'key': 'attemptHeatingAdjustment', 'type': 'bool'},
        'num_baseline_months': {'key': 'numBaselineMonths', 'type': 'int'},
        'baseline_start_date': {'key': 'baselineStartDate', 'type': 'iso-8601'},
        'cooling_needed_above': {'key': 'coolingNeededAbove', 'type': 'int'},
        'heating_needed_below': {'key': 'heatingNeededBelow', 'type': 'int'},
        'include_meter_in_cost_avoidance': {'key': 'includeMeterInCostAvoidance', 'type': 'bool'},
        'savings_start_date': {'key': 'savingsStartDate', 'type': 'iso-8601'},
        'filters': {'key': 'filters', 'type': '[FilterEdit]'},
    }

    def __init__(self, *, attempt_cooling_adjustment: bool=None, attempt_heating_adjustment: bool=None, num_baseline_months: int=None, baseline_start_date=None, cooling_needed_above: int=None, heating_needed_below: int=None, include_meter_in_cost_avoidance: bool=None, savings_start_date=None, filters=None, **kwargs) -> None:
        super(BulkMeterCostAvoidanceSettings, self).__init__(**kwargs)
        self.attempt_cooling_adjustment = attempt_cooling_adjustment
        self.attempt_heating_adjustment = attempt_heating_adjustment
        self.num_baseline_months = num_baseline_months
        self.baseline_start_date = baseline_start_date
        self.cooling_needed_above = cooling_needed_above
        self.heating_needed_below = heating_needed_below
        self.include_meter_in_cost_avoidance = include_meter_in_cost_avoidance
        self.savings_start_date = savings_start_date
        self.filters = filters
