/*!
 *
 * Copyright (c) 2019-2020 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    PreTreatmentSampleStack.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      11-Mar-2021
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  11-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
        title.text              : qsTr("System Self Test")
        hasTimeCircle           : true
        timeCircleMinimum       : 0
        timeCircleMaximum       : vPreTreatmentSelfTestNoCartridge.total
        timeCircleProgressValue : vPreTreatmentSelfTestNoCartridge.elapsed
        timeCircleTimeTextValue : vPreTreatmentSelfTestNoCartridge.remaining * 60
    }

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

    PreTreatmentBase { id: _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
        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
        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
        onSelfTestNoCartridge_startChanged  : {                                                      /* , vselfTestNoCartridge_start      */  }
        // FW does not go all the time to start so the main state change should be sufficient to update the disposables stack.
        onSelfTestNoCartridgeChanged        : { page( _preTreatmentDisposablesSelfTest                  , vselfTestNoCartridge               )}
        onInstallationChanged               : { page( _preTreatmentDisposablesCartridgeInstallation     , vinstallation                      )}
    }

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