/*!
 *
 * 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

    // - set visible to false as init state to correctly indicate visible screens
    // - TreatmentUltrafiltrationItem is not a ScreenItem, thus visible is true automatically
    visible:false

    function open() {
        if ( isUFRunning ) {
            _treatmentAdjustmentUltrafiltrationStart .open()
        } else {
            _treatmentAdjustmentUltrafiltrationPaused.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()
        _treatmentAdjustmentUltrafiltrationPaused   .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()
        }
    }

    TreatmentAdjustmentUltrafiltrationPaused { id: _treatmentAdjustmentUltrafiltrationPaused
        onCloseClicked          : close()
        onEditClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationEdit.reset() // reset the slider to minimum value position
            _treatmentAdjustmentUltrafiltrationEdit.open()
        }
        onResumeClicked         : {
            // send resume to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentAdjustmentUltrafiltrationState.doResume()
        }
    }

    TreatmentAdjustmentUltrafiltrationEdit { id: _treatmentAdjustmentUltrafiltrationEdit
        onBackClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationPaused.open()
        }
        onNextClicked           : {
            // 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 ()
        }
        onConfirmRateClicked    : {
            vTreatmentAdjustmentUltrafiltrationConfirm.doOptionRate(vVolume)
        }
        onConfirmDurationClicked: {
            vTreatmentAdjustmentUltrafiltrationConfirm.doOptionDuration(vVolume)
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltrationState
        function onAdjustmentTriggered              ( vValue ) {
            if ( vTreatmentAdjustmentUltrafiltrationState.adjustment_Accepted ) {
                if (vHDTreatmentStates.ufPaused) { // handle screen regarding current accepted
                    _treatmentAdjustmentUltrafiltrationStart .close()
                    _treatmentAdjustmentUltrafiltrationPaused.open ()
                } else {
                    _treatmentAdjustmentUltrafiltrationPaused.close()
                }
            }
            else {
                if (vHDTreatmentStates.ufRunning) { // handle error messages regarding current accepted
                    _treatmentAdjustmentUltrafiltrationStart.notificationText = vTreatmentAdjustmentUltrafiltrationState.adjustment_ReasonText
                } else {
                    _treatmentAdjustmentUltrafiltrationPaused.notificationText = vTreatmentAdjustmentUltrafiltrationState.adjustment_ReasonText
                }
            }
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltrationEdit
        function onAdjustmentTriggered              ( vValue ) {
            if (vTreatmentAdjustmentUltrafiltrationEdit.adjustment_Accepted) {
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationVolume    = vTreatmentAdjustmentUltrafiltrationEdit.volume
                _treatmentAdjustmentUltrafiltrationConfirm.treatmentDuration        = vTreatmentAdjustmentUltrafiltrationEdit.duration
                _treatmentAdjustmentUltrafiltrationConfirm.treatmentDurationDiff    = vTreatmentAdjustmentUltrafiltrationEdit.durationDiff
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRate      = vTreatmentAdjustmentUltrafiltrationEdit.rate
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateDiff  = vTreatmentAdjustmentUltrafiltrationEdit.rateDiff
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateOld   = vTreatmentAdjustmentUltrafiltrationEdit.rateOld

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

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

}
