/*!
 *
 * 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)      Dara Navaei
 * \date    (last)      16-Jul-2024
 * \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 heatActiveTitle : qsTr("Heat Disinfect with Active Cool")
    readonly property string chemicalTitle   : qsTr("Chemical Disinfect")
    readonly property string chemFlushTitle  : qsTr("Chemical Flush")
    readonly property string roPermeateTitle : qsTr("RO Permeate Sample")
    readonly property string heatPassiveTitle: qsTr("Heat Disinfect")

    function doDisinfectFlush           () { vDisinfectAdjustDisinfect.doDisinfectFlush           (); page( _disinfectFlush             )}
    function doDisinfectHeatActiveCool  () { vDisinfectAdjustDisinfect.doDisinfectHeatActiveCool  (); page( _disinfectHeatActiveCool    )}
    function doDisinfectChemical        () { vDisinfectAdjustDisinfect.doDisinfectChemical        (); page( _disinfectChemical          )}
    function doDisinfectChemFlush       () { vDisinfectAdjustDisinfect.doDisinfectChemFlush       (); page( _disinfectChemFlush         )}
    function doDisinfectROPermeate      () { vDisinfectAdjustDisinfect.doDisinfectROPermeate      (); page( _disinfectROPermeate        )}
    function doDisinfectHeatPassiveCool () { vDisinfectAdjustDisinfect.doDisinfectHeatPassiveCool (); page( _disinfectHeatPassiveCool   )}

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

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

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

        TouchGrid {
            property bool isVisible: vAdjustmentInstitutionalRecord.enableChemicalDisinfect
            width           : parent.width / 2
            itemWidth       : Variables.disinfectionItemWidth
            colCount        : 1
            colSpacing      : 0
            itemsText       : [ _root.flushTitle    , _root.heatActiveTitle       , _root.chemicalTitle   , _root.chemFlushTitle  , _root.roPermeateTitle ,  _root.heatPassiveTitle     ]
            itemsVisible    : [ true                , true                        , isVisible             , isVisible             , true                  ,   true                      ]
            onItemClicked   : [ doDisinfectFlush    , doDisinfectHeatActiveCool   , doDisinfectChemical   , doDisinfectChemFlush  , doDisinfectROPermeate ,   doDisinfectHeatPassiveCool][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          :  _disinfectHeatActiveCool
        objectName              : "_disinfectHeatActiveCool"
        header.stepLineLength   : 200
        header.stepNames        : [ _root.disinfectTitle ,  _root.heatActiveTitle ]
        title.text              :                           _root.heatActiveTitle
        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  ()
    }

    DisinfectBase { id          :  _disinfectHeatPassiveCool
        objectName              : "_disinfectHeatPassiveCool"
        header.stepNames        : [ _root.disinfectTitle ,  _root.heatPassiveTitle ]
        title.text              :                           _root.heatPassiveTitle
        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_DisinfectStartHeatActiveTriggered   ( vValue ) { doDisplayReasonText( _disinfectHeatActiveCool )}
        function onAdjustment_DisinfectStartChemicalTriggered     ( vValue ) { doDisplayReasonText( _disinfectChemical       )}
        function onAdjustment_DisinfectStartChemFlushTriggered    ( vValue ) { doDisplayReasonText( _disinfectChemFlush      )}
        function onAdjustment_DisinfectStartROPermeateTriggered   ( vValue ) { doDisplayReasonText( _disinfectROPermeate     )}
        function onAdjustment_DisinfectStartHeatPassiveTriggered  ( vValue ) { doDisplayReasonText( _disinfectHeatPassiveCool)}
    }

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