/*!
 *
 * 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    PreTreatmentPrimeStack.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      15-Mar-2021
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  15-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
        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("Used Cartridge Check"     ),
            qsTr("Occlusion Sensors Check"  ),
            qsTr("Pressure Sensors Check"   ),
            qsTr("Syringe Pump Check"       ),
        ]
    }

    PreTreatmentBase { id: _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
        onSelfTestDryChanged                        : { page( _preTreatmentDrySelfTest                      , vselfTestDry                          )}
        onSelfTestDry_startChanged                  : {}
        onSelfTestDry_waitDoorCloseChanged          : {}
        onSelfTestDry_usedCartridgeEntered          : { _preTreatmentDrySelfTest        .checkList.setItem(0, vselfTestDry_usedCartridge            )}
        onSelfTestDry_occlusionSensorsEntered       : { _preTreatmentDrySelfTest        .checkList.setItem(1, vselfTestDry_occlusionSensors         )}
        onSelfTestDry_pressureSensorsSetupEntered   : { _preTreatmentDrySelfTest        .checkList.setItem(2, true                                  )}
        onSelfTestDry_pressureSensorsEntered        : {}
        onSelfTestDry_pressureSensorsNormalEntered  : { _preTreatmentDrySelfTest        .checkList.setItem(2, vselfTestDry_pressureSensorsNormal    )}
        onSelfTestDry_syringePumpEntered            : { _preTreatmentDrySelfTest        .checkList.setItem(3, vselfTestDry_syringePump              )}
        onSelfTestDry_stoppedEntered                : {}
        onSelfTestDry_completeEntered               : {}
    }

    Connections { target: vPreTreatmentStates
        onPrimeChanged                              : { page( _preTreatmentDisposablesPrime                 , vprime                                )}
        onPrime_waitUserStartEntered                : {}
        onPrime_salineSetupEntered                  : { _preTreatmentDisposablesPrime   .checkList.setItem(0, true                                  )}
        onPrime_salinePurgeAirEntered               : {}
        onPrime_salineCirculateBloodCircuitEntered  : { _preTreatmentDisposablesPrime   .checkList.setItem(0, vprime_salineCirculateBloodCircuit    )}
        onPrime_reservoiOneFillCompleteEntered      : { _preTreatmentDisposablesPrime   .checkList.setItem(1, true                                  )}
        onPrime_dialysateDialyzerEntered            : {}
        onPrime_reservoirTwoFillCompleteEntered     : {}
        onPrime_dialysateBypassEntered              : { _preTreatmentDisposablesPrime   .checkList.setItem(1, vprime_dialysateBypass                )}
        onPrime_wetSelfTestsEntered                 : { _preTreatmentDisposablesPrime   .checkList.setItem(2, vprime_wetSelfTests                   )}
        onPrime_pauseEntered                        : {}
        onPrime_completeEntered                     : {}
    }

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

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

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

    onStartPrimeClicked: { vPreTreatmentAdjustmentDisposablesPrime.doPrime() }

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