/*!
 *
 * 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    PreTreatmentPrimeStack.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      03-Mar-2023
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  01-Mar-2021
 *
 */

// Qt
import QtQuick 2.12

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

/*!
 * \brief   The Pre Tretreatment Prime Stack Screen
 */
StackItem { id: _root
    objectName: "_PreTreatmentPrimeStack"

    stackView.initialItem   : null

    property int stackStepIndex : 4

    signal startPrimeClicked()

    PreTreatmentBase { id: _preTreatmentDrySelfTest
        objectName       :"_preTreatmentDrySelfTest"
        header.confirmVisible   : false // state change is immediate after test completed
        header.confirmEnabled   : vPreTreatmentStates.selfTestDry_complete
        isComplete              : vPreTreatmentStates.selfTestDry_complete
        title.text              : qsTr("Begin Prime")
        completeText            : qsTr("Self Test Complete!")
        // time circle
        hasTimeCircle           : true
        timeCircleMinimum       : 0
        timeCircleMaximum       : vPreTreatmentSelfTestDry.total
        timeCircleProgressValue : vPreTreatmentSelfTestDry.elapsed
        timeCircleTimeTextValue : vPreTreatmentSelfTestDry.remaining * 60

        // chcek list
        hasCheckList            : true
        checkListStepNames      : [
            qsTr("Occlusion Sensor Check"       ),
            qsTr("Cartridge Install Checks"     ),
            qsTr("Pressure Leak Check"          ),
            qsTr("Priming Heparin Line"         ),
            qsTr("Syringe Pump Occlusion Check" ),
        ]
    }

    PreTreatmentBase { id: _preTreatmentDisposablesPrime
        objectName       :"_preTreatmentDisposablesPrime"
        header.confirmVisible   : true
        header.confirmText.text :  qsTr("CONTINUE")
        header.confirmEnabled   : _preTreatmentDisposablesPrime.isComplete
        isComplete              : vPreTreatmentStates.recirculate
        title.text              : qsTr("Priming")
        completeText            : qsTr("Priming Complete!")
        footer {
            childrenCount       : 1 // only one child is visible at a time
            children            : [
                TouchRect { id: _startPrimeButton
                    visible     : ! _preTreatmentDisposablesPrime.isComplete
                    enabled     :   vPreTreatmentStates.prime_waitUserStart
                    width       : parent.spacing
                    text.text   : qsTr("Start  Prime")
                    onClicked   : _root.startPrimeClicked()
                }
                // , // commented out in demo feedback kept if needed to have any other screen later
                // Text { id: _recirculateText
                //     visible     : _preTreatmentDisposablesPrime.isComplete
                //     width       : parent.spacing
                //     height      : _startPrimeButton.height
                //     text        : qsTr("Recirculating ... ")
                //     color       : Colors.textMain
                //     font.pixelSize      : Fonts.fontPixelNotification
                //     horizontalAlignment : Text.AlignHCenter
                //     verticalAlignment   : Text.AlignVCenter
                // }
            ]
        }
        // time circle
        hasTimeCircle           : true
        timeCircleMinimum       : 0
        timeCircleMaximum       : vPreTreatmentDisposablesPrime.total
        timeCircleProgressValue : vPreTreatmentDisposablesPrime.elapsed
        timeCircleTimeTextValue : vPreTreatmentDisposablesPrime.remaining * 60
        // check list
        hasCheckList            : true
        checkListStepNames      : [
            qsTr("Blood Circuit Priming"    ),
            qsTr("Dialysate Circuit Priming"),
            qsTr("Wet Self Tests"           ),
        ]
    }

    Connections { target: vPreTreatmentStates
        function onSelfTestDryChanged                               ( vValue ) { page( _preTreatmentDrySelfTest                      , vValue       )}
        function onSelfTestDry_startChanged                         ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(0, true         )}
        function onSelfTestDry_waitDoorCloseChanged                 ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(0, vValue       )}
        function onSelfTestDry_usedCartridgeEntered                 ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(1, true        )}
        function onSelfTestDry_cartridgeLoadedEntered               ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(1, vValue       )}
        function onSelfTestDry_pressureSensorsNormalSetupEntered    ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(2, true         )}
        function onSelfTestDry_pressureSensorsVenousSetupEntered    ( vValue ) {}
        function onSelfTestDry_pressureSensorsVenousEntered         ( vValue ) {}
        function onSelfTestDry_pressureSensorsArterialSetupEntered  ( vValue ) {}
        function onSelfTestDry_pressureSensorsArterialEntered       ( vValue ) {}
        function onSelfTestDry_pressureSensorsDecayEntered          ( vValue ) {}
        function onSelfTestDry_pressureSensorsStabilityEntered      ( vValue ) {}
        function onSelfTestDry_pressureSensorsNormalEntered         ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(2, vValue       )}
        function onSelfTestDry_syringePumpEntered                   ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(3, vValue       )}
        function onSelfTestDry_syringePumpOcclusionDetectionEntered ( vValue ) { _preTreatmentDrySelfTest        .checkList.setItem(4, vValue       )}
        function onSelfTestDry_stoppedEntered                       ( vValue ) {}
        function onSelfTestDry_completeEntered                      ( vValue ) {}
    }

    Connections { target: vPreTreatmentStates
        function onPrimeChanged                                     ( vValue ) { page( _preTreatmentDisposablesPrime                 , vValue       )}
        function onPrime_waitUserStartEntered                       ( vValue ) {}
        function onPrime_salineSetupEntered                         ( vValue ) { _preTreatmentDisposablesPrime   .checkList.setItem(0, true         )}
        function onPrime_salineCirculateBloodCircuitEntered         ( vValue ) { _preTreatmentDisposablesPrime   .checkList.setItem(0, vValue       )}
        function onPrime_reservoiOneFillCompleteEntered             ( vValue ) { _preTreatmentDisposablesPrime   .checkList.setItem(1, true         )}
        function onPrime_dialysateDialyzerEntered                   ( vValue ) {}
        function onPrime_dialysateBypassEntered                     ( vValue ) { _preTreatmentDisposablesPrime   .checkList.setItem(1, vValue       )}
        function onPrime_wetSelfTestsEntered                        ( vValue ) { _preTreatmentDisposablesPrime   .checkList.setItem(2, vValue       )}
        function onPrime_pauseEntered                               ( vValue ) {}
        function onPrime_completeEntered                            ( vValue ) {}
    }

    Connections { target: vPreTreatmentAdjustmentDisposablesPrime
        function onAdjustmentTriggered                              ( vValue ) {
            if ( vPreTreatmentAdjustmentDisposablesPrime.adjustment_Accepted ) {
                _preTreatmentDisposablesPrime.reasonText = ""
            } else {
                _preTreatmentDisposablesPrime.reasonText = vPreTreatmentAdjustmentDisposablesPrime.text()
            }
        }
    }

    Connections { target: _preTreatmentDisposablesPrime
        function onConfirmClicked                                   ( vValue ) {
            vPreTreatmentAdjustmentPatientConnectionBegin.doBegin()
        }
    }

    Connections { target: vPreTreatmentAdjustmentPatientConnectionBegin
        function onAdjustmentTriggered                              ( vValue ) {
            if ( vPreTreatmentAdjustmentPatientConnectionBegin.adjustment_Accepted ) {
                _preTreatmentDisposablesPrime.reasonText = ""
            } else {
                _preTreatmentDisposablesPrime.reasonText = vPreTreatmentAdjustmentPatientConnectionBegin.text()
            }
        }
    }

    onStartPrimeClicked: { vPreTreatmentAdjustmentDisposablesPrime.doPrime() }

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