/*!
 *
 * Copyright (c) 2020-2025 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    TreatmentAdjustmentVitalsInterval.qml
 * \author  (last)      Nico Ramirez
 * \date    (last)      03-Oct-2025
 * \author  (original)  Nico Ramirez
 * \date    (original)  03-Oct-2025
 *
 */

// Qt
import QtQuick 2.12

// Project
import "qrc:/globals"
import "qrc:/components"
import "qrc:/compounds"

TreatmentAdjustmentBase { id: _root
    contentItem.objectName: "TreatmentAdjustmentVitalsInterval"
    titleText           : qsTr("Vitals Settings")

    titlePixelSize      : Fonts.fontPixelSection
    readonly property int containerWidth        : (_root.width - (Variables.defaultMargin * 5))/2

    readonly property bool  isValid             :   _systolicLowAlarmLimit      .valid &&
                                                    _systolicHighAlarmLimit     .valid &&
                                                    _heartRateLowAlarmLimit     .valid &&
                                                    _heartRateHighAlarmLimit    .valid &&
                                                    _bpMeasurementInterval      .valid

    function confirm() {
        vTreatmentCreate.bloodPressureMeasureInterval   = vTreatmentRanges.bloodPressureMeasureInterval[_bpMeasurementIntervalControl.currentIndex]
        vTreatmentAdjustmentVitalsAlarmLimits.doAdjustment(_systolicLowAlarmLimit.value                     ,
                                                           _systolicHighAlarmLimit.value                    ,
                                                           _heartRateLowAlarmLimit.value                    ,
                                                           _heartRateHighAlarmLimit.value                   ,
                                                            vTreatmentCreate.bloodPressureMeasureInterval   )
        vTreatmentVitals.doTimerStart()
    }

    onOpened: _bpMeasurementIntervalControl.currentIndex = vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString())


    Row { id: _controlRow
        objectName          : "_controlRow"
        anchors {
            top             : parent.top
            topMargin       : Variables.defaultMargin * 2
            bottom          : _confirmButton.top
            horizontalCenter: parent.horizontalCenter
        }
        spacing             : Variables.defaultMargin

        Column { id: _controlLeftColumn
            objectName  : "_controlLeftColumn"
            spacing     : Variables.defaultMargin

            LabelUnitValueAdjuster { id: _systolicLowAlarmLimit
                width           : _root.containerWidth
                text            : qsTr("Systolic BP Low Alarm Limit")
                unitText        : Variables.unitTextBloodPressure
                valid           : ! vTreatmentAdjustmentVitalsAlarmLimits.systolicBpLowAlarmLimitRejectionReson
                minimum         : vTreatmentRanges.systolicBloodPressureLowAlarmLimitMin
                maximum         : vTreatmentRanges.systolicBloodPressureLowAlarmLimitMax
                step            : vTreatmentRanges.systolicBloodPressureLowAlarmLimitRes
                value           : vTreatmentRanges.systolicBloodPressureLowAlarmLimitDef
                isActive        : true
                onDidChange     : function(vValue) {
                    if ( ! _systolicLowAlarmLimit.valid ) { vTreatmentAdjustmentVitalsAlarmLimits.systolicBpLowAlarmLimitRejectionReson = Variables.noRejectReason }
                    value = vValue
                }
            }

            LabelUnitValueAdjuster { id: _systolicHighAlarmLimit
                width           : _root.containerWidth
                text            : qsTr("Systolic BP Low Alarm Limit")
                unitText        : Variables.unitTextBloodPressure
                valid           : ! vTreatmentAdjustmentVitalsAlarmLimits.systolicBpHighAlarmLimitRejectionReson
                minimum         : vTreatmentRanges.systolicBloodPressureHighAlarmLimitMin
                maximum         : vTreatmentRanges.systolicBloodPressureHighAlarmLimitMax
                step            : vTreatmentRanges.systolicBloodPressureHighAlarmLimitRes
                value           : vTreatmentRanges.systolicBloodPressureHighAlarmLimitDef
                isActive        : true
                onDidChange     : function(vValue) {
                    if ( ! _systolicHighAlarmLimit.valid ) { vTreatmentAdjustmentVitalsAlarmLimits.systolicBpHighAlarmLimitRejectionReson = Variables.noRejectReason }
                    value = vValue
                }
            }
        }

        Column { id: _controlRightColumn
            objectName: "_controlRightColumn"
            spacing: Variables.defaultMargin

            LabelUnitValueAdjuster { id: _heartRateLowAlarmLimit
                width           : _root.containerWidth
                text            : qsTr("Heart Rate Low Alarm Limit")
                unitText        : Variables.unitTextHeartBeat
                valid           : ! vTreatmentAdjustmentVitalsAlarmLimits.heartRateLowAlarmLimitRejectionReson
                minimum         : vTreatmentRanges.heartRateLowAlarmLimitMin
                maximum         : vTreatmentRanges.heartRateLowAlarmLimitMax
                step            : vTreatmentRanges.heartRateLowAlarmLimitRes
                value           : vTreatmentRanges.heartRateLowAlarmLimitDef
                isActive        : true
                onDidChange     : function(vValue) {
                    if ( ! _heartRateLowAlarmLimit.valid ) { vTreatmentAdjustmentVitalsAlarmLimits.heartRateLowAlarmLimitRejectionReson = Variables.noRejectReason }
                    value = vValue
                }
            }

            LabelUnitValueAdjuster { id: _heartRateHighAlarmLimit
                width           : _root.containerWidth
                text            : qsTr("Heart Rate High Alarm Limit")
                unitText        : Variables.unitTextHeartBeat
                valid           : ! vTreatmentAdjustmentVitalsAlarmLimits.heartRateHighAlarmLimitRejectionReson
                minimum         : vTreatmentRanges.heartRateHighAlarmLimitMin
                maximum         : vTreatmentRanges.heartRateHighAlarmLimitMax
                step            : vTreatmentRanges.heartRateHighAlarmLimitRes
                value           : vTreatmentRanges.heartRateHighAlarmLimitDef
                isActive        : true
                onDidChange     : function(vValue) {
                    if ( ! _heartRateHighAlarmLimit.valid ) { vTreatmentAdjustmentVitalsAlarmLimits.heartRateHighAlarmLimitRejectionReson = Variables.noRejectReason }
                    value = vValue
                }
            }

            LabelUnitContainer { id: _bpMeasurementInterval
                text        : qsTr("Vitals Interval")
                unitText    : Variables.unitTextDuration
                valid       : ! vTreatmentAdjustmentVitalsAlarmLimits.vitalsIntervalRejectionReson
                width       : _root.containerWidth
                height      : Variables.adjustmentLabelUnitContainerHeight

                contentItem : ValueAdjusterCustom { id: _bpMeasurementIntervalControl
                    isActive            : vTreatmentCreate.bloodPressureMeasureIntervalSet
                    value               : vTreatmentRanges.bloodPressureMeasureInterval.indexOf(vTreatmentCreate.bloodPressureMeasureInterval.toString())
                    model               : vTreatmentRanges.bloodPressureMeasureInterval
                    defaultValue        : vTreatmentRanges.vitalsInterval
                    canOff              : true

                    onDidActiveChange: function(vState) {  vTreatmentCreate.bloodPressureMeasureIntervalSet = vState }

                    onDidChange     : function(vValue) {
                        if ( ! _bpMeasurementInterval.valid ) {
                            vTreatmentAdjustmentVitalsAlarmLimits.vitalsIntervalRejectionReson = Variables.noRejectReason
                        }
                        vTreatmentCreate.bloodPressureMeasureIntervalSet = true
                    }
                }
            }
        }
    }

    ConfirmButton { id : _confirmButton
        anchors {
            bottom          : _root.contentItem.bottom
            bottomMargin    : Variables.defaultMargin * 4
            horizontalCenter: _root.contentItem.horizontalCenter
        }

        width       : Variables.defaultButtonWidth
        height      : Variables.defaultButtonHeight
        enabled     : _bpMeasurementIntervalControl.isActive

        anchors {
            top     : undefined
            right   : undefined
            margins : 0
        }
        onClicked   : {
            _root.confirm()
        }
    }
}
