
// Qt
import QtQuick 2.12

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

/*!
 * \brief   the pre treatment water sample stack screen
 */
StackItem { id: _root
    stackView.initialItem   : null

    enum Step {
        BloodSetTubing          ,
        BloodLines              ,
        PressureLinesAndDialyzer,
        SalineSubStitution      ,
        Count
    }

    property int subStepIndex: PreTreatmentInstallStack.Step.BloodSetTubing
    property int    stepIndex: PreTreatmentStack.Step.Installation

    onVisibleChanged: {
        if (visible) {
            _headerBar.activeStack = stackView
            initStack()
        }
    }

    signal goToNextStep()
    signal goToPreviousStep()

    function setPage(vPage, vCondition) {
        _root.subStepIndex = vPage.stepIndex
        page( vPage , vCondition)
    }

    function initStack() { setPage ( _preTreatmentBloodSetTubing ) }

    function continueClicked() {
        switch ( _root.subStepIndex ) {
        case PreTreatmentInstallStack.Step.BloodSetTubing:
            vPreTreatmentAdjustmentDisposablesConfirm.doConfirm()
            break
        case PreTreatmentInstallStack.Step.BloodLines:
            setPage ( _preTreatmentPressureLinesAndDialyzer )
            break
        case PreTreatmentInstallStack.Step.PressureLinesAndDialyzer:
            setPage ( _pretreatmentSalineSubstitution )
            break
        case PreTreatmentInstallStack.Step.SalineSubStitution:
            goToNextStep ()
            break
        default:
            break
        }
    }

    function backClicked() {
        switch ( _root.subStepIndex ) {
        case PreTreatmentInstallStack.Step.BloodSetTubing:
            goToPreviousStep ()
            break
        case PreTreatmentInstallStack.Step.BloodLines:
            setPage ( _preTreatmentBloodSetTubing )
            break
        case PreTreatmentInstallStack.Step.PressureLinesAndDialyzer:
            setPage ( _preTreatmentBloodLines )
            break
        case PreTreatmentInstallStack.Step.SalineSubStitution:
            setPage ( _preTreatmentPressureLinesAndDialyzer )
            break
        default:
            break
        }
    }

    function confirmButtonText() {
        if ( vSettings.advancedMode ) { return qsTr("Auto Load") }

        switch ( _root.subStepIndex ) {
        case PreTreatmentInstallStack.Step.BloodSetTubing:
            return qsTr("Auto Load")
        case PreTreatmentInstallStack.Step.BloodLines:
        case PreTreatmentInstallStack.Step.PressureLinesAndDialyzer:
        case PreTreatmentInstallStack.Step.SalineSubStitution:                  // fall through
        default:
            return qsTr("Next")
        }
    }

    // ----- Screens definitions
    PreTreatmentBase { id: _preTreatmentBloodSetTubing;             stepIndex: PreTreatmentInstallStack.Step.BloodSetTubing;            subStepName: qsTr("Blood Tubing Set");              instructionBased: true  }
    PreTreatmentBase { id: _preTreatmentBloodLines;                 stepIndex: PreTreatmentInstallStack.Step.BloodLines;                subStepName: qsTr("Bloodlines");                    instructionBased: true  }
    PreTreatmentBase { id: _preTreatmentPressureLinesAndDialyzer;   stepIndex: PreTreatmentInstallStack.Step.PressureLinesAndDialyzer;  subStepName: qsTr("Pressure Lines and Dialyzer");   instructionBased: true  }
    PreTreatmentBase { id: _pretreatmentSalineSubstitution;         stepIndex: PreTreatmentInstallStack.Step.SalineSubStitution;                                                            instructionBased: true
                        subStepName: vTreatmentCreate.treatmentModality === HeaderBar.Mode_HDF ? qsTr("Substitution") :
                                                                                                 qsTr("Saline")
    }

    // blood tubing set auto-load
    Connections { target: vPreTreatmentAdjustmentDisposablesConfirm
        function onAdjustmentTriggered              ( vValue ) {
            if ( vPreTreatmentAdjustmentDisposablesConfirm.adjustment_Accepted ) {
                _preTreatmentBloodSetTubing.reasonText     = ""
                if ( vSettings.advancedMode )   { goToNextStep ()                   }
                else                            { setPage ( _preTreatmentBloodLines )  }
            } else {
                 _preTreatmentBloodSetTubing.reasonText    = vPreTreatmentAdjustmentDisposablesConfirm.text()
            }
        }
    }
}
