/*!
 *
 * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved.
 * \copyright
 * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN
 * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER.
 *
 * \file    DisinfectStack.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      28-May-2023
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  17-Apr-2021
 *
 */

// Qt
import QtQuick 2.12

// Project
//  Qml imports
import "qrc:/globals"
import "qrc:/components"
import "qrc:/compounds"
import "qrc:/pages/disinfect"
/*!
 * \brief   the post treatment prime stack screen
 */
StackItem { id: _root
    objectName: "_DisinfectStack"

    stackView.initialItem   : null

    property int stackStepIndex : 1

    readonly property string disinfectTitle : qsTr("Disinfection")
    readonly property string flushTitle     : qsTr("Water Flush")
    readonly property string heatTitle      : qsTr("Heat Disinfect")
    readonly property string chemicalTitle  : qsTr("Chemical Disinfect")
    readonly property string chemFlushTitle : qsTr("Chemical Flush")
    readonly property string roPermeateTitle: qsTr("RO Permeate Sample")

    function doDisinfectFlush       () { vDisinfectAdjustDisinfect.doDisinfectFlush     (); page( _disinfectFlush       )}
    function doDisinfectHeat        () { vDisinfectAdjustDisinfect.doDisinfectHeat      (); page( _disinfectHeat        )}
    function doDisinfectChemical    () { vDisinfectAdjustDisinfect.doDisinfectChemical  (); page( _disinfectChemical    )}
    function doDisinfectChemFlush   () { vDisinfectAdjustDisinfect.doDisinfectChemFlush (); page( _disinfectChemFlush   )}
    function doDisinfectROPermeate  () { vDisinfectAdjustDisinfect.doDisinfectROPermeate(); page( _disinfectROPermeate  )}

    function doDisinfectBack        () { vDisinfectAdjustDisinfect.doDisinfectClear     (); page ( _disinfectHome       )}
    function doDisinfectConfirm     () { vDisinfectAdjustDisinfect.doDisinfectConfirm   ();                              }

    function doDisplayReasonText    (vPage) {
        if ( vDisinfectAdjustDisinfect.adjustment_Accepted ){ vPage.reasonText = ""                                }
        else                                                { vPage.reasonText = vDisinfectAdjustDisinfect.text()  }
    }

    property var doDisinfects   : [
        doDisinfectFlush     ,
        doDisinfectHeat      ,
        doDisinfectChemical  ,
        doDisinfectChemFlush ,
        doDisinfectROPermeate,
    ]

    DisinfectBase { id          :  _disinfectHome
        objectName              : "_disinfectHome"
        property int stackStepIndex : 0
        header.stepNames        : [ _root.disinfectTitle ]
        title.text              :   _root.disinfectTitle

        TouchGrid {
            width       : parent.width / 2
            colCount    : 1
            colSpacing  : 0
            // rowCount    : itemsText
            itemsText   : [
                _root.flushTitle     ,
                _root.heatTitle      ,
                _root.chemicalTitle  ,
                _root.chemFlushTitle ,
                _root.roPermeateTitle,
            ]
            onItemClicked: {
                doDisinfects[vIndex]()
            }
        }
        Image { id: _denaliDeviceImage
            anchors.right           : parent.right
            anchors.verticalCenter  : parent.verticalCenter
            anchors.rightMargin     : Variables.minVGap2 * 4
            fillMode                : Image.PreserveAspectFit
            width                   : Variables.denaliDeviceDiameter
            height                  : Variables.denaliDeviceDiameter
            source                  : "qrc:/images/iDenaliDevice"
        }
        header.backVisible      :   vDisinfectAdjustDisinfect   .hasCancel          // if initiated by User from setting can be canceled.
        onBackClicked           : { vDisinfectAdjustDisinfect   .doDisinfectCancel          () }
    }

    DisinfectBase { id          :  _disinfectFlush
        objectName              : "_disinfectFlush"
        header.stepNames        : [ _root.disinfectTitle ,  _root.flushTitle ]
        title.text              :                           _root.flushTitle
        instructionBased        : true
        header.backVisible      : true
        header.confirmVisible   : true
        onBackClicked           : doDisinfectBack     ()
        onConfirmClicked        : doDisinfectConfirm  ()
    }

    DisinfectBase { id          :  _disinfectHeat
        objectName              : "_disinfectHeat"
        header.stepNames        : [ _root.disinfectTitle ,  _root.heatTitle ]
        title.text              :                           _root.heatTitle
        instructionBased        : true
        header.backVisible      : true
        header.confirmVisible   : true
        onBackClicked           : doDisinfectBack     ()
        onConfirmClicked        : doDisinfectConfirm  ()
    }

    DisinfectBase { id          :  _disinfectChemical
        objectName              : "_disinfectChemical"
        header.stepNames        : [ _root.disinfectTitle ,  _root.chemicalTitle ]
        title.text              :                           _root.chemicalTitle
        instructionBased        : true
        header.backVisible      : true
        header.confirmVisible   : true
        onBackClicked           : doDisinfectBack     ()
        onConfirmClicked        : doDisinfectConfirm  ()
    }

    DisinfectBase { id          :  _disinfectChemFlush
        objectName              : "_disinfectChemFlush"
        header.stepNames        : [ _root.disinfectTitle ,  _root.chemFlushTitle ]
        title.text              :                           _root.chemFlushTitle
        instructionBased        : true
        header.backVisible      : true
        header.confirmVisible   : true
        onBackClicked           : doDisinfectBack     ()
        onConfirmClicked        : doDisinfectConfirm  ()
    }

    DisinfectBase { id          :  _disinfectROPermeate
        objectName              : "_disinfectROPermeate"
        header.stepNames        : [ _root.disinfectTitle ,  _root.roPermeateTitle ]
        title.text              :                           _root.roPermeateTitle
        instructionBased        : true
        header.backVisible      : true
        header.confirmVisible   : true
        onBackClicked           : doDisinfectBack     ()
        onConfirmClicked        : doDisinfectConfirm  ()
    }

    // ----- Navigation
    Connections { target: vHDOperationMode
        function onStandbyWaitDisinfectChanged                    ( vValue ) { page( _disinfectHome    , vValue        )} // initialItem
    }

    // ----- Responses
    Connections { target:  vDisinfectAdjustDisinfect
        function onAdjustment_DisinfectModeTriggered              ( vValue ) { doDisplayReasonText( _disinfectHome      )}
        function onAdjustment_DisinfectStartFlushTriggered        ( vValue ) { doDisplayReasonText( _disinfectFlush     )}
        function onAdjustment_DisinfectStartHeatTriggered         ( vValue ) { doDisplayReasonText( _disinfectHeat      )}
        function onAdjustment_DisinfectStartChemicalTriggered     ( vValue ) { doDisplayReasonText( _disinfectChemical  )}
        function onAdjustment_DisinfectStartROPermeateTriggered   ( vValue ) { doDisplayReasonText( _disinfectROPermeate)}
    }

    onVisibleChanged: {
        if (visible) {
            _mainMenu.hidden = true
        }
        else {
            stackView.initialItem = null
        }
    }
}
