/*!
 *
 * 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    TreatmentUltrafiltrationItem.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      27-Apr-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/treatment/adjustments"
/*!
 * \brief   the treatment ultrafiltration flow manager screen
 */
Item { id: _root
    objectName: "_TreatmentUltrafiltration"
    anchors.fill: parent
    visible     : _treatmentAdjustmentUltrafiltrationStart.visible
                  || _treatmentAdjustmentUltrafiltrationEdit.visible
                  || _treatmentAdjustmentUltrafiltrationConfirm.visible

    function open() {
        _treatmentAdjustmentUltrafiltrationStart.open()
    }

    function close() { // this close should be never needed by design, but in tests it can easily happen and will block the screen touch.
        _treatmentAdjustmentUltrafiltrationStart    .close()
        _treatmentAdjustmentUltrafiltrationEdit     .close()
        _treatmentAdjustmentUltrafiltrationConfirm  .close()
    }

    TreatmentAdjustmentUltrafiltrationStart { id: _treatmentAdjustmentUltrafiltrationStart
        onCloseClicked          : close()
        onPauseClicked          : {
            // send pause to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentAdjustmentUltrafiltrationState.doPause()
        }
        onEditClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationEdit.reset() // reset the slider to minimum value position
            _treatmentAdjustmentUltrafiltrationEdit.open()
        }
        onIsolatedUfClicked     : {
            console.log("Isolated UF clicked")
        }
        onResumeClicked         : {
            // send resume to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentAdjustmentUltrafiltrationState.doResume()
        }
    }

    TreatmentAdjustmentUltrafiltrationEdit { id: _treatmentAdjustmentUltrafiltrationEdit
        onBackClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationStart.open()
        }
        onContinueClicked       : function(vVolume) {
            // send Volume to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentAdjustmentUltrafiltrationEdit.doAdjustment(vVolume)
        }
    }

    TreatmentAdjustmentUltrafiltrationConfirm { id: _treatmentAdjustmentUltrafiltrationConfirm
        onBackClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationEdit.open ()
        }
        onConfirmVolumeClicked  : {
            vTreatmentAdjustmentUltrafiltrationConfirm.doConfirm(vVolume)
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltrationState
        function onAdjustmentTriggered              ( vValue ) {
            _treatmentAdjustmentUltrafiltrationStart.notificationText = vTreatmentAdjustmentUltrafiltrationState.adjustment_ReasonText
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltrationEdit
        function onAdjustmentTriggered              ( vValue ) {
            if (vTreatmentAdjustmentUltrafiltrationEdit.adjustment_Accepted) {
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationVolume    = vTreatmentAdjustmentUltrafiltrationEdit.volume
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRate      = vTreatmentAdjustmentUltrafiltrationEdit.rate

                if (_root.visible) {
                    _treatmentAdjustmentUltrafiltrationEdit   .close()
                    _treatmentAdjustmentUltrafiltrationConfirm.reset()
                    _treatmentAdjustmentUltrafiltrationConfirm.open()
                }
            } else {
                _treatmentAdjustmentUltrafiltrationEdit.notification.text = vTreatmentAdjustmentUltrafiltrationEdit.text()
            }
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltrationConfirm
        function onAdjustmentTriggered              ( vValue ) {
            if (vTreatmentAdjustmentUltrafiltrationConfirm.adjustment_Accepted) {
                _treatmentAdjustmentUltrafiltrationConfirm.close()
            } else {
                _treatmentAdjustmentUltrafiltrationConfirm.notification.text = vTreatmentAdjustmentUltrafiltrationConfirm.text()
            }
        }
    }

}
