/*!
 *
 * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved.
 * \copyright                                                       \n
 *          THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM,  \n
 *          IN PART OR IN WHOLE,                                    \n
 *          WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. \n
 *
 * \file    TreatmentStack.qml
 * \date    2019/10/21
 * \author  Behrouz NematiPour
 *
 */

// Qt
import QtQuick 2.12

// Project
import VTreatmentRanges 0.1

//  Qml imports
import "qrc:/globals"
import "qrc:/components"
import "qrc:/pages/treatment/adjustments"
/*!
 * \brief   TreatmentStack is the screen
 * which contains the main stack for all the Trearment screens
 * This is the screen which will be show up when "Treatment" option
 * is selected from the main menu.
 */
StackItem { id : _root
    stackView.initialItem   : _treatmentHome

    VTreatmentRanges        { id: vTreatmentRanges }

    MainMenu                { id: _treatmentMenu
        y               : -Variables.mainMenuHeight
        position        : MainMenu.Position.Top
        hidden          : true
        titles          : [ qsTr("Back") , qsTr("Treatment") , qsTr("Trending") , qsTr("Settings") ]
        spacing         :  20
        leftPdding      :  20
        partitionWidth  : 100 // Todo Important : max width should be the width for all
        hasRightText    : true
        hasLogo         : true
    }

    TreatmentHome               { id:       _treatmentHome
        onTreatmentStarted      : push( _treatmentStart )
        onTreatmentCreated      : push( _treatmentCreate)
    }

    TreatmentStart              { id:       _treatmentStart
        onBackClicked           : pop ()
        onSectionFlowClicked    : {
            _treatmentAdjustmentFlow.open()
        }
        onSectionTimeClicked    : {
            _treatmentAdjustmentDuration.open()
        }
        onSectionUltrafiltrationClicked: {
            if ( vTreatmentUltrafiltrationState.isPaused ) {
                _treatmentAdjustmentUltrafiltrationPaused.open()
            } else {
                _treatmentAdjustmentUltrafiltrationStart .open()
            }
        }
    }

    TreatmentCreate             { id:       _treatmentCreate
        onBackClicked           : pop()
    }

    //// Treatment Adjustment Dialogs
    TreatmentAdjustmentFlow     { id:       _treatmentAdjustmentFlow
        onCloseClicked          : close()
        onConfirmClicked        : vTreatmentAdjustmentFlows.doAdjustment(bloodFlowRateValue, dialysateFlowRateValue)
    }
    TreatmentAdjustmentDuration { id:       _treatmentAdjustmentDuration
        onCloseClicked          : close()
        onConfirmClicked        : vTreatmentAdjustmentDuration.doAdjustment(durationValue)
    }

    TreatmentAdjustmentUltrafiltrationStart { id: _treatmentAdjustmentUltrafiltrationStart
        onCloseClicked          : close()
        onPauseClicked          : {
            // send pause to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentUltrafiltrationState.doPause()
        }
    }

    TreatmentAdjustmentUltrafiltrationPaused { id: _treatmentAdjustmentUltrafiltrationPaused
        onCloseClicked          : close()
        onEditClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationEdit.open()
        }
        onResumeClicked         : {
            // send resume to HD and wait.
            // if accepted close()
            // not accepted show error in notification
            vTreatmentUltrafiltrationState.doResume()
        }
    }

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

    TreatmentAdjustmentUltrafiltrationConfirm { id: _treatmentAdjustmentUltrafiltrationConfirm
        onBackClicked           : {
            close()
            _treatmentAdjustmentUltrafiltrationEdit.open()
        }
        onConfirmRateClicked         : {
            vTreatmentUltrafiltrationConfirm.doOptionRate(vVolume)
        }
        onConfirmDurationClicked         : {
            vTreatmentUltrafiltrationConfirm.doOptionDuration(vVolume)
        }
    }

    // manage the Pause Resume response
    Connections { target: vTreatmentUltrafiltrationState
        onAdjustmentTriggered: {
            if ( vTreatmentUltrafiltrationState.adjustment_Accepted ) {
                if ( vTreatmentUltrafiltrationState.isPaused ) {
                    _treatmentAdjustmentUltrafiltrationStart .close()
                    _treatmentAdjustmentUltrafiltrationPaused.open ()
                } else {
                    _treatmentAdjustmentUltrafiltrationPaused.close()
                }
            } else {
                if ( vTreatmentUltrafiltrationState.isPaused ) {
                    _treatmentAdjustmentUltrafiltrationPaused.notification.text = vTreatmentUltrafiltrationState.text()
                } else {
                    _treatmentAdjustmentUltrafiltrationStart .notification.text = vTreatmentUltrafiltrationState.text()
                }
            }
        }
    }

    Connections { target: vTreatmentAdjustmentUltrafiltration
        onAdjustmentTriggered: {
            console.debug(
                        vTreatmentAdjustmentUltrafiltration.volume        ,
                        vTreatmentAdjustmentUltrafiltration.duration      ,
                        vTreatmentAdjustmentUltrafiltration.durationDiff  ,
                        vTreatmentAdjustmentUltrafiltration.rate          ,
                        vTreatmentAdjustmentUltrafiltration.rateDiff      ,
                        vTreatmentAdjustmentUltrafiltration.rateOld
                        )
            if (vTreatmentAdjustmentUltrafiltration.adjustment_Accepted) {
                _treatmentAdjustmentUltrafiltrationEdit   .close()

                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationVolume    = 1000 * vTreatmentAdjustmentUltrafiltration.volume     .toFixed(3)
                _treatmentAdjustmentUltrafiltrationConfirm.treatmentDuration        = vTreatmentAdjustmentUltrafiltration.duration
                _treatmentAdjustmentUltrafiltrationConfirm.treatmentDurationDiff    = vTreatmentAdjustmentUltrafiltration.durationDiff
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRate      = vTreatmentAdjustmentUltrafiltration.rate       .toFixed(3)
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateDiff  = vTreatmentAdjustmentUltrafiltration.rateDiff   .toFixed(3)
                _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateOld   = vTreatmentAdjustmentUltrafiltration.rateOld    .toFixed(3)

                _treatmentAdjustmentUltrafiltrationConfirm.open()
            } else {
                _treatmentAdjustmentUltrafiltrationEdit.notification.text = vTreatmentAdjustmentUltrafiltration.text()
            }
        }
    }
}
