/*!
 *
 * Copyright (c) 2021-2024 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    EndTreatmentRecirculateStack.qml
 * \author  (last)      Vy
 * \date    (last)      17-May-2023
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  11-Apr-2021
 *
 */

// Qt
import QtQuick 2.12

// Project
//  Qml imports
import "qrc:/globals"
import "qrc:/components"
import "qrc:/pages/endtreatment/recirculate"

/*!
 * \brief   the end treatment recirculate stack screen
 */
StackItem { id: _root
    objectName: "_recirculateRecirculateStack"

    stackView.initialItem           : null

    property int stackStepIndex     : 0

    signal reconnectClicked         ()
    signal confirmDisconnectClicked ()
    signal confirmReconnectClicked  ()
//    signal recirculateResumeClicked() // enum command not used comment
    signal treatmentEndClicked      ()

    onReconnectClicked                          : vTreatmentAdjustmentRecirculate.doReconnect           () //84.0  ///< User requests to re-connect to system (stop re-circulating, clamp arterial and venous lines)
    onConfirmReconnectClicked                   : vTreatmentAdjustmentRecirculate.doConfirmReconnect    () //84.1  ///< User confirms patient connected, lines un-shunted to return to treatment
//    onRecirculateResumeClicked                  : vTreatmentAdjustmentRecirculate.doResume              () // enum command not used comment  ///< User requests to resume re-circulation
    onTreatmentEndClicked                       : vTreatmentAdjustmentRecirculate.doTreatmentEnd        () //84.3  ///< User requests to end treatment
    onConfirmDisconnectClicked                  : vTreatmentAdjustmentRecirculate.doConfirmDisconnect   () //84.4  ///< User confirms patient disconnected, lines shunted to begin re-circulation

    onVisibleChanged: {
        if (visible) {
            _headerBar.activeStack = stackView
            _headerBar.menuHidden = true
        }
        else {
            stackView.initialItem = null
        }
    }

    component ButtonBackToRecirculate   : TouchRect {
        text.text                       : qsTr("BACK TO RECIRCULATE")
        onClicked                       : recirculateBackClicked()
    }
    
    component ButtonEndTreatment        : TouchRect {
        text.text                       : qsTr("End Treatment")
        height                          : Variables.defaultButtonHeight
        textColor                       : borderColor
        onClicked                       : treatmentEndClicked()
    }

    component ButtonStartRecirculate    : TouchRect {
        text.text                       : qsTr("Start Recirculation")
        isDefault                       : true
        height                          : Variables.defaultButtonHeight
        onClicked                       : confirmDisconnectClicked()
    }

    component ButtonResume              : TouchRect {
        text.text                       : qsTr("Resume Treatment")
        isDefault                       : true
        height                          : Variables.defaultButtonHeight
    }

    // Disconnect
    EndTreatmentBase                 { id: _recirculateDisconnect
        headerTitle                     : qsTr("Recirculate Set Up")
        instructionBased                : true
        footer.children                 : [
            ButtonEndTreatment          {},
            ButtonStartRecirculate      {}
        ]
    }

    // Recirculate
    EndTreatmentRecirculateProgress { id: _recirculateProgress
        footer.children                 : [
            ButtonEndTreatment          {   textColor: Colors.offWhite              },
            ButtonResume                {   onClicked: reconnectClicked()           }  /// doReconnect
        ]
    }

    // Reconnect
    EndTreatmentBase                 { id: _recirculateReconnect
        headerTitle                     : qsTr("Reconnect To Patient")
        instructionBased                : true
        footer.children                 : [
            ButtonEndTreatment          {                                           },
            ButtonResume                {   onClicked: confirmReconnectClicked()    }  // /doConfirmReconnect
        ]
    }

    Connections { target: vTDTreatmentStates
        function onRcDisconnectChanged          ( vValue ) { page( _recirculateDisconnect   , vValue   )} // set up
        function onRcStartedChanged             ( vValue ) { page( _recirculateProgress     , vValue   )} // in progress
        // TODO: check during integration
//        function onRcStoppedChanged             ( vValue ) { page( _recirculateStopped      , vValue   )} // complete
        function onRcReconnectChanged           ( vValue ) { page( _recirculateReconnect    , vValue   )} // disconnect
    }

    Connections { target: vTreatmentAdjustmentRecirculate
        function onAdjustmentTriggered          ( vValue ) {
            // there is only one message to handle all the sub pages of rinseback
            // since the rejection reason will be cleared by each trasition
            // so it's fine to set all at the same time
            // and let them cleared for their own message when each get visible.
            if ( vTreatmentAdjustmentRecirculate.adjustment_Accepted ) {
                _recirculateDisconnect  .reasonText = ""
                _recirculateProgress    .reasonText = ""
                _recirculateReconnect   .reasonText = ""
            }
            else {
                _recirculateDisconnect  .reasonText = vTreatmentAdjustmentRecirculate.text()
                _recirculateProgress    .reasonText = vTreatmentAdjustmentRecirculate.text()
                _recirculateReconnect   .reasonText = vTreatmentAdjustmentRecirculate.text()
            }
        }
    }
}
