# Copyright (c) 2021 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name:
    25.3.14. [TC-CC-6.1] Color Temperature MoveTo functionality with server as
    DUT

PICS:
    - CC.S

config:
    nodeId: 0x12344321
    cluster: "Color Control"
    endpoint: 1

tests:
    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "TH writes 0 to the Options attribute"
      PICS: CC.S.F04 && CC.S.A000f
      command: "writeAttribute"
      attribute: "Options"
      arguments:
          value: 0

    - label: "TH sends On command to DUT"
      PICS: OO.S.C01.Rsp
      cluster: "On/Off"
      command: "On"

    - label: "TH reads ColorTempPhysicalMinMireds attribute from DUT"
      PICS: CC.S.F04 && CC.S.A400b
      command: "readAttribute"
      attribute: "ColorTempPhysicalMinMireds"
      response:
          saveAs: ColorTempPhysicalMinMiredsValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65279

    - label: "TH reads ColorTempPhysicalMaxMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A400c
      command: "readAttribute"
      attribute: "ColorTempPhysicalMaxMireds"
      response:
          saveAs: ColorTempPhysicalMaxMiredsValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65279

    - label: "TH reads ColorTemperatureMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A0007
      command: "readAttribute"
      attribute: "ColorTemperatureMireds"
      response:
          constraints:
              type: int16u
              minValue: ColorTempPhysicalMinMiredsValue
              maxValue: ColorTempPhysicalMaxMiredsValue

    - label:
          "TH sends MoveToColorTemperature command to DUT with
          ColorTemperatureMireds=310 and TransitionTime=0 (immediately)."
      PICS: CC.S.F04 && CC.S.C0a.Rsp
      command: "MoveToColorTemperature"
      arguments:
          values:
              - name: "colorTemperature"
                value: 310
              - name: "TransitionTime"
                value: 0
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 100

    - label:
          "TH sends MoveToColorTemperatur command to DUT with
          ColorTemperatureMireds=250 and TransitionTime=300 (30s)."
      PICS: CC.S.F04 && CC.S.C0a.Rsp
      command: "MoveToColorTemperature"
      arguments:
          values:
              - name: "colorTemperature"
                value: 250
              - name: "TransitionTime"
                value: 300
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label: "Wait 10s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 10000

    - label: "TH reads ColorTemperatureMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A0007 && CC.S.C0a.Rsp
      command: "readAttribute"
      attribute: "ColorTemperatureMireds"
      response:
          constraints:
              minValue: 246
              maxValue: 334

    - label: "Wait 10s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 10000

    - label: "TH reads ColorTemperatureMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A0007 && CC.S.C0a.Rsp
      command: "readAttribute"
      attribute: "ColorTemperatureMireds"
      response:
          constraints:
              minValue: 230
              maxValue: 310

    - label: "Wait 10s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 10000

    - label: "TH reads ColorTemperatureMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A0007 && CC.S.C0a.Rsp
      command: "readAttribute"
      attribute: "ColorTemperatureMireds"
      response:
          constraints:
              minValue: 212
              maxValue: 288

    - label: "Wait 5s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "TH reads ColorTemperatureMireds attribute from DUT."
      PICS: CC.S.F04 && CC.S.A0007 && CC.S.C0a.Rsp
      command: "readAttribute"
      attribute: "ColorTemperatureMireds"
      response:
          constraints:
              minValue: 212
              maxValue: 288

    - label: "TH reads ColorMode attribute from DUT"
      PICS: CC.S.F04 && CC.S.A0008
      command: "readAttribute"
      attribute: "ColorMode"
      response:
          value: 2
          constraints:
              minValue: 0
              maxValue: 2

    - label: "TH reads EnhancedColorMode attribute from DUT"
      PICS: CC.S.F04 && CC.S.A4001
      command: "readAttribute"
      attribute: "EnhancedColorMode"
      response:
          value: 2
          constraints:
              minValue: 0
              maxValue: 3

    - label: "Turn Off light that we turned on"
      PICS: OO.S.C00.Rsp
      cluster: "On/Off"
      command: "Off"

    - label: "Check on/off attribute value is false after off command"
      cluster: "On/Off"
      command: "readAttribute"
      attribute: "OnOff"
      PICS: OO.S.A0000
      response:
          value: 0
