/*!
 *
 * Copyright (c) 2021-2023 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    PreTreatmentDisposablesStack.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      02-Feb-2023
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  18-Mar-2021
 *
 */

// Qt
import QtQuick 2.12

// Project
//  Qml imports
import "qrc:/globals"
import "qrc:/components"
import "qrc:/pages/pretreatment"

/*!
 * \brief   the pre-treatment disposables stack screen
 */
StackItem { id: _root
    objectName: "_PreTreatmentDisposableStack"

    stackView.initialItem   : null

    property int stackStepIndex : 3

    readonly property bool hasHeparin : vTreatmentCreate.heparinBolusVolume || vTreatmentCreate.heparinDispensingRate

    PreTreatmentBase { id: _preTreatmentDisposablesSelfTest
        objectName       :"_preTreatmentDisposablesSelfTest"
        title.text              : qsTr("System Self Test")
        hasTimeCircle           : true
        timeCircleMinimum       : 0
        timeCircleMaximum       : vPreTreatmentSelfTestNoCartridge.total
        timeCircleProgressValue : vPreTreatmentSelfTestNoCartridge.elapsed
        timeCircleTimeTextValue : vPreTreatmentSelfTestNoCartridge.remaining * 60
    }

    PreTreatmentBase { id: _preTreatmentDisposablesCartridgeInstallation
        objectName       :"_preTreatmentDisposablesCartridgeInstallation"
        title.text              : qsTr("Cartridge Installation")
        header.confirmVisible   : true
        header.confirmText.text : qsTr("NEXT")
        instructionBased        : true
        onConfirmClicked        : { page( _preTreatmentDisposablesCartridgeConnetion    )}
    }

    PreTreatmentBase { id: _preTreatmentDisposablesCartridgeConnetion
        objectName       :"_preTreatmentDisposablesCartridgeConnetion"
        function page_confirm() {
            if ( _root.hasHeparin ) page( _preTreatmentDisposablesHeparinSyringe        )
            else                    page( _preTreatmentDisposablesSalineBag             )
        }

        title.text              : qsTr("Cartridge Connection")
        header.backVisible      : true
        header.confirmVisible   : true
        header.confirmText.text : qsTr("NEXT")
        instructionBased        : true
        onBackClicked           : { page( _preTreatmentDisposablesCartridgeInstallation )}
        onConfirmClicked        : { page_confirm(                                       )}
    }

    PreTreatmentBase { id: _preTreatmentDisposablesHeparinSyringe
        objectName       :"_preTreatmentDisposablesHeparinSyringe"
        title.text              : qsTr("Heparin Syringe")
        header.backVisible      : true
        header.confirmVisible   : true
        header.confirmText.text : qsTr("NEXT")
        instructionBased        : true
        onBackClicked           : { page( _preTreatmentDisposablesCartridgeConnetion    )}
        onConfirmClicked        : { page( _preTreatmentDisposablesSalineBag             )}
    }

    PreTreatmentBase { id: _preTreatmentDisposablesSalineBag
        objectName       :"_preTreatmentDisposablesSalineBag"
        function page_back() {
            if ( _root.hasHeparin ) page( _preTreatmentDisposablesHeparinSyringe        )
            else                    page( _preTreatmentDisposablesCartridgeConnetion    )
        }

        title.text              : qsTr("Saline Bag")
        header.backVisible      : true
        header.confirmVisible   : true
        header.confirmText.text : qsTr("CONFIRM")
        instructionBased        : true
        onBackClicked           : { page_back(                                          )}
        onConfirmClicked        : { vPreTreatmentAdjustmentDisposablesConfirm.doConfirm()}
    }

    Connections { target: vPreTreatmentStates
        // FW does not go all the time to start so the main state change should be sufficient to update the disposables stack.
        function onSelfTestNoCartridgeChanged       ( vValue ) { page( _preTreatmentDisposablesSelfTest                  , vValue )}
        function onInstallationChanged              ( vValue ) { page( _preTreatmentDisposablesCartridgeInstallation     , vValue )}
    }

    // FIXME: this is just a BandAid
    // there should be a final screen after SalineBag to collect HD errors of user disposables installation
    // the current message response regarding of the error will be displayed on the SalineBag screen which at least currently doesn't related to that screen (It is Heparin Syringe not installed.)
    Connections { target: vPreTreatmentAdjustmentDisposablesConfirm
        function onAdjustmentTriggered              ( vValue ) {
            if ( vPreTreatmentAdjustmentDisposablesConfirm.adjustment_Accepted ) {
                _preTreatmentDisposablesSalineBag.reasonText = ""
            } else {
                _preTreatmentDisposablesSalineBag.reasonText = vPreTreatmentAdjustmentDisposablesConfirm.text()
            }
        }
    }

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